関数型プログラミング ..
151:デフォルトの名無しさん
08/05/31 22:56:33
>>142が突っ込んでるのは
> Maybe a -> (a -> Maybe b) ここまでが入力だよね?
の部分。
> 2項目の引数が関数になっているって解釈でいいんだよね?
こっちは合ってる。
152:デフォルトの名無しさん
08/05/31 23:54:09
カリー化とは何か?を書いた方がいいんではないでしょうか。
↓ではお願いします。
153:デフォルトの名無しさん
08/05/31 23:58:34
この関数適用は出来損ないだ。食べられないよ。
154:初心者修業中
08/06/01 01:08:22
カリー化とは、
複数の引数を持つ関数を
引数一つの関数の組み合せとする事。
…と認識しています。
155:デフォルトの名無しさん
08/06/01 01:08:36
カリー化という言葉を見ると頭の中で
「カリンカカリンカ カリンカマヤ」という歌が繰り返されて止まらなくなる。
156:デフォルトの名無しさん
08/06/01 01:54:38
おれもそうりかいしてる。<154
でも、カリー化ときいてターメリックをぶっかけてるイメージしかないw
157:デフォルトの名無しさん
08/06/01 09:01:04
ガラムマサラとかも入れた方がいいのでは?
158:デフォルトの名無しさん
08/06/01 10:27:15
エバラ化、桃屋化
159:デフォルトの名無しさん
08/06/01 10:28:14
味の素化
160:デフォルトの名無しさん
08/06/01 10:59:26
>>140は
A -> (B -> C)
というふうに切り出してしまったけど、これは本来の
A → ((B → C) → D)
という結合関係を無視してる(「A -> (B -> C)」という型を扱うみたいに書いている)。
ってのが>>142でしょ。
カリー化の影響として、「複数の引数をとる」
(A × (B → C)) → D
ことと、「関数を返す」ことの、どちらに主眼があるかが不明瞭になるってのがあると思うね。
161:デフォルトの名無しさん
08/06/01 11:24:29
>>151>>160
その理屈は分かるんだが、カリー化を理解してるのか怪しい初心者に対して
混乱させるようなことを言うのは不親切だと思う
Maybe aと(a -> Maybe b)の二つが引数になっているという理解で正しい、と教えれば十分じゃないか
162:デフォルトの名無しさん
08/06/01 11:29:36
f(a,b,c) = y
f : A×B×C→Y
f a b c = ((f a) b) c = y
(((f a) b) c) : Y
((f a) b) : C→Y
(f a) : B→(C→Y)
f : A→(B→(C→Y))
163:デフォルトの名無しさん
08/06/01 11:48:09
> Maybe a -> (a -> Maybe b) ここまでが入力だよね?
「ここまでが引数リストに対応する部分だよね?」と読むと○
「ここまでが引数の型だよね?」と読むと× ← ちょっと窮屈な解釈かも、みたいな空気
164:デフォルトの名無しさん
08/06/01 15:19:49
> Maybe a -> (a -> Maybe b) -> ここまでが入力だよね?
と書けばおk
165:デフォルトの名無しさん
08/06/01 17:10:16
なるほどw
166:デフォルトの名無しさん
08/06/01 23:06:52
複数引数の邪悪な関数をこらしめるのがカリー化です。
167:デフォルトの名無しさん
08/06/01 23:33:45
それだけならタプルで渡せばいいだけじゃそ
168:デフォルトの名無しさん
08/06/01 23:44:14
:
=>
これがよくわからん
169:デフォルトの名無しさん
08/06/01 23:47:32
<コ:彡
170:デフォルトの名無しさん
08/06/02 00:31:27
兄者…
171:初心者修業中
08/06/02 01:36:10
>>168
:は、リストの先頭に要素を結合する演算子
=>の左辺(文脈)は、
多相的なデータを静的型チェックするために
コンパイラに与える条件
…と認識しています。
172:OCamler
08/06/03 22:55:07
だれかもうちょっと正しいコメントを付けてやってください。お願いします。
173:デフォルトの名無しさん
08/06/04 01:51:13
[1, 2, 3] ← ふつうの見やすい表記(ただし、本来のデータ構造が見えない)
1 : [2, 3]
1 : 2 : [3]
1 : 2 : 3 : [] ← 本来のデータ構築子 (:)(cons)、[](nil)で書く(ただし、いまいちリストに見えない)
1 : (2 : (3 : [])) ← 右結合性にたよらないで書く
(:) 1 ((:) 2 ((:) 3 [])) ← 演算子としての表記法をやめる(S式マゾ以外には読みにくい)
174:初心者修業中
08/06/04 01:51:20
お願いします m(_ _)m
175:デフォルトの名無しさん
08/06/04 03:18:52
Haskell実用経験皆無の俺が来ましたよ
>>168
4.1 Overview of Types and Classes
> but the type system has been extended with type classes (or just classes)
> that provide a structured way to introduce overloaded functions.
型クラスの存在意義がわかるかどうかだと思う。
整数の足し算と有理数の足し算って、ふつう同じ記号を使うけど、
計算の内容は違う(多重定義、オーバーロードされている)でしょ。
でも、共通の性質を考えたいときもある。
そのとき、ただ「共通の演算記号+を使っているから同類とみなす」では話にならないから、
twice :: a -> a
twice x = x + x -- 2倍したいけど、+の型などがコンパイル時に不明
+を「Numという型クラスの特徴」として整理して、整数や有理数はその特徴を共有している、とみなすと。
twice :: Num a => a -> a -- 「型aはクラスNumに属する(Numのインスタンスである)」という前提をする
twice x = x + x -- と、演算子+の存在と型が保証される
そんな感じ?(ごめん、確認してない)
176:デフォルトの名無しさん
08/06/04 07:01:52
改めて見るとオーバーロードの解釈が破綻してるなw
すまぬ
177:デフォルトの名無しさん
08/06/05 00:09:02
=>
C++のテンプレートの特殊化みたいなものか
演算子は定義されているけど特定の型じゃないと
処理できない場合、特定のの変数を特殊化すること
あるけど
178:初心者修業中
08/06/05 00:54:30
>>177
日本語でお願いしますm(_ _)m
179:デフォルトの名無しさん
08/06/05 08:24:10
Haskellian ももうブランドではなくなりましたね…
メジャーになった証か
180:デフォルトの名無しさん
08/06/05 08:41:12
=> の意味は総称型に制限を与える、じゃだめなのかなぁ。
質問、というより興味本位のアンケート。
あなたが思うhaskellの面白いところってどこですか?
181:デフォルトの名無しさん
08/06/05 09:05:56
アホな質問するスレがあるところ
182:デフォルトの名無しさん
08/06/05 16:59:32
堅い言語なのに簡潔に書けるようになってるところが面白いと思うし、すごく好きだ
記号を多用してたり、インデントを使ってたり
183:デフォルトの名無しさん
08/06/05 18:54:01
「haskell使ってる」と言うと、みんなに尊敬して貰えること
184:デフォルトの名無しさん
08/06/05 19:19:05
>>180
高速化を考え出すと、すごくたいへんなところ。
185:デフォルトの名無しさん
08/06/05 21:02:04
[(x,y) | x + y = 10]
186:デフォルトの名無しさん
08/06/05 21:59:49
>>183
このスレ見てたらそう思えんわな、、、
187:デフォルトの名無しさん
08/06/05 22:55:55
知らない人は知らないし、知ってる人はわかるもんな
しかしいい言語だ
188:デフォルトの名無しさん
08/06/05 23:02:27
汎関数系の言語はC++もそうだが、
かなり野心的な言語設計になるね。
クラス囲い込み度が低いからだろうか。
189:デフォルトの名無しさん
08/06/05 23:56:07
>>185
そんなのできたの!?と思って ghci で試したらできなかった。
ちょっと悲しくなった。
190:デフォルトの名無しさん
08/06/06 00:00:22
インデントがよくわからなくて
エラーでていらつく
なんとかならんのかね?この糞言語
インデント制約糞なら最初からなんか
そういう機能入れろよなぁ
あーあー世界で最悪の糞言語だね
インデントのせいだけで
191:デフォルトの名無しさん
08/06/06 00:12:41
>>190
そういう説もあります。
そうでないという説もあります。
192:デフォルトの名無しさん
08/06/06 00:29:14
インデントがいやなら { } と ; で全部区切ればいいじゃん
一緒だよ
193:デフォルトの名無しさん
08/06/06 00:37:44
traceの使い方qsortのサンプル使って
教えてくれませんか?
qsort _ [] = [] (1)
qsort f (x:xs) = before ++ (x : after) (2)
where before = qsort f (filter (not . (f x)) xs) (3)
after = qsort f (filter (f x) xs) (4)
どこにいれればいいのやらw
194:デフォルトの名無しさん
08/06/06 03:41:00
それを見つけるのにもtraceが役立つのではないか
195:初心者修業中
08/06/06 05:35:07
>>193
私はまだtraceに手を出すつもりはありませんが、
ググってみました。
参考になるでしょうか…?
↓
第15回 Haskellでのデバッグのコツをつかむ
URLリンク(itpro.nikkeibp.co.jp)
import Debug.Trace
quicksort[] = []
quicksort(x:xs) =
trace ("x." ++ show x) $
trace ("x." ++ show x ++ " > y." ++ show losort) $
trace ("x." ++ show x ++ " <= y." ++ show hisort) $
losort ++ [x] ++ hisort
where
losort = quicksort [y|y <- xs, y < x]
hisort = quicksort [y|y <- xs, y >= x]
Main> quicksort [3,2..1]
x.3
x.2
x.1
x.1 > y.[]
x.1 <= y.[]
x.2 > y.[1]
x.2 <= y.[]
x.3 > y.[1,2]
x.3 <= y.[]
[1,2,3]
196:デフォルトの名無しさん
08/06/06 07:41:25
[(x,y) | x <- [1..], y <- [1..], x+y = 10]
197:初心者修業中
08/06/06 08:06:28
>>196
これ、やってみたけど止まりませんね…。
*Main> take 10 [(x,y)|x<-[0..],y<-[0..],(x+y)==10]
[(0,10)
x=0 のままyの無限リストを検索してるから当たり前ですけど…
*Main> take 10 [(x,y)|x<-[0..],y<-[0..]]
[(0,0),(0,1),(0,2),(0,3),(0,4),(0,5),(0,6),(0,7),(0,8),(0,9)]
↓みたいなリストを返す簡単な方法ありますかね…?
[(0,0),(1,0),(0,1),(2,0),(1,1),(0,2).....]
198:初心者修業中
08/06/06 08:42:12
こんなもんかな…
tlist::[(Int,Int)]
tlist = concatMap (\n ->f n) [0..]
where f = \n->take (n+1) $ iterate (\(x,y) ->(x-1,y+1)) (n,0)
*Main> take 10 tlist
[(0,0),(1,0),(0,1),(2,0),(1,1),(0,2),(3,0),(2,1),(1,2),(0,3)]
*Main> take 10 [(x,y)| (x,y)<-tlist, (x+y)==10]
[(10,0),(9,1),(8,2),(7,3),(6,4),(5,5),(4,6),(3,7),(2,8),(1,9)]
199:デフォルトの名無しさん
08/06/06 08:43:25
つまらない答えだが
[(x,y) | k <- [0..], x <- [0..k], y <- [0..k], x + y == k]
200:デフォルトの名無しさん
08/06/06 08:52:37
つまらないのならこれが一番
[(x, 10-x) | x <- [0..10]]
201:デフォルトの名無しさん
08/06/06 08:54:12
>>199
間違ってるやん!
202:デフォルトの名無しさん
08/06/06 09:51:55
[(a,b) | x <- [0..], y <- [0..x], x + y == 10, (a,b) <- [(x,y), (y,x)]]
こんなんできたっけ
203:デフォルトの名無しさん
08/06/06 09:52:48
なんだ(a,b)って t <- [(x,y), (y,x)]
204:デフォルトの名無しさん
08/06/06 10:16:24
>>190
Pythonに見られるインデントによる制御構造の是非
スレリンク(tech板)l50
205:初心者修業中
08/06/06 14:27:09
>>202-203
なるほど、そういう事もできるのですね。
*Main> take 12 [t | x <- [0..], y <- [0..x], (x+y)==10, t<-[(x,y),(y,x)]]
[(5,5),(5,5),(6,4),(4,6),(7,3),(3,7),(8,2),(2,8),(9,1),(1,9),(10,0),(0,10)]
リストモナドの>>=はconcatMapでしたもんね。
勉強になります。
(5,5),(5,5)がだぶってるのが、おしいですね。
206:デフォルトの名無しさん
08/06/06 15:16:52
GHC 6.8.3 まだー?
207:デフォルトの名無しさん
08/06/06 18:05:51
>>206
作って公開してくれ。
208:デフォルトの名無しさん
08/06/07 00:31:44
無明関数って何がうれしいの?
209:デフォルトの名無しさん
08/06/07 00:52:24
いちいち関数の名前考えなくても良い
名前をつけるまでもない単純な関数を作る時に便利
210:デフォルトの名無しさん
08/06/07 01:08:37
名前を付けることは名前空間を汚染すると言うこと
名前よりも式そのもののほうが理解しやすい場合もある
211:デフォルトの名無しさん
08/06/07 01:24:35
getChar >>= \a -> getChar >>= \b -> putChar b >> putChar a
こういうのに名前つけるのはいやだな
212:デフォルトの名無しさん
08/06/07 02:04:23
>>208
そういう話題は関数型言語スレのほうが向いている。
関数型言語一般について語れるよ。
213:デフォルトの名無しさん
08/06/07 02:12:55
>>208
どんなバックグラウンドをもってる?関数型言語についての経験は?
手続き型の国の人ならば、わかりにくいところやね。
関数を変数でもたすってのは関数型では日常茶飯事なんですわ。
そこに便利さのヒントがアルよ。
214:デフォルトの名無しさん
08/06/07 07:57:49
map (\(a, b) -> a+b) [(1,1), (2, 3) ..]
215:デフォルトの名無しさん
08/06/07 10:56:31
>>213
手続きの国からワープしてきたのですが
関数を変数にするならポインタ渡せばよくないですか?
そうすれば、定義しても渡せますよね?
216:デフォルトの名無しさん
08/06/07 11:20:46
名前があってもなくてもポインタ渡すのです
関数オブジェクトは、メソッドがひとつしかないクラスのインスタンス、に似ています
インスタンスに名前がついているとは限らないのです
217:デフォルトの名無しさん
08/06/07 11:33:06
>>216
よくわからないぉ
もう少し詳しく説明してぉ?
218:デフォルトの名無しさん
08/06/07 11:43:32
無明関数…悟りでも得たいのか?
219:デフォルトの名無しさん
08/06/07 11:46:43
>>218
間違えただけだぉ気にしないで
220:デフォルトの名無しさん
08/06/07 11:47:44
>>218
悟りは得るものではなく開くものです。
221:デフォルトの名無しさん
08/06/07 12:06:14
名前を考えるのが面倒くさい
再利用しない
定義している箇所を探すのが面倒くさい
関数内部の処理が簡潔
のときは無名関数使いたくならないか?
222:デフォルトの名無しさん
08/06/07 12:14:34
つーか、関数本体そのものずばりを一覧できる状態で渡しているのにわざわざ名前をつける必要があるのだろうか
223:デフォルトの名無しさん
08/06/07 12:28:02
カリー化
(new Satori(x)).open(y)
224:デフォルトの名無しさん
08/06/07 12:43:21
無名関数で再帰するにはどうすればいいですか
たとえば、
f n = if n == 1 then 1 else n * f (n-1)
はどのように書けばいいですか?
225:デフォルトの名無しさん
08/06/07 12:46:45
fix (\f n -> if n == 1 then 1 else n * f (n-1))
むみょーん。Haskellian じゃないから fix があるかどうかシラネ
226:デフォルトの名無しさん
08/06/07 12:49:20
型無し言語なら
(\f -> f f) (\f n -> if n == 1 then 1 else n * f f (n-1))
227:デフォルトの名無しさん
08/06/07 12:54:26
あー、でも f って名前つけちゃったな
228:デフォルトの名無しさん
08/06/07 13:11:01
>>225-226
ここはHaskellのスレですよ
229:初心者修業中
08/06/07 13:17:55
>>225
Control.Monad.Fix にありますね。
fix :: (a -> a) -> a
fix f = let x = f x in x
230:デフォルトの名無しさん
08/06/07 13:22:40
>>224
不動点演算のfixを使うようです。
Prelude> Control.Monad.Fix.fix(\f n -> if n == 1 then 1 else n * f (n-1)) 5
120
231:デフォルトの名無しさん
08/06/07 14:00:44
(\y f -> f (y f)) (\y f -> f (y f)) (\y f -> f (y f)) (\y f -> f (y f)) ...
232:デフォルトの名無しさん
08/06/07 14:16:56
>>224
... f ...
where f n = if n == 1 then 1 else n * f (n-1)
局所的な関数定義で代わりになるんじゃないの、というのはダメかな
233:デフォルトの名無しさん
08/06/07 16:01:17
>>232に同意
234:デフォルトの名無しさん
08/06/07 16:19:36
名前が付いてるからダメ
235:デフォルトの名無しさん
08/06/07 16:37:58
... (f where f n = if n == 1 then 1 else n * f (n-1)) ...
こうかー
236:デフォルトの名無しさん
08/06/07 17:21:15
>>235
whereが作るのは式じゃなくて節だから使える場所が決まってる(定義の後とかcase選択肢の後とか)
... (let f n = if n == 1 then 1 else n * f (n-1)) in f) ...
ならおk
237:デフォルトの名無しさん
08/06/07 17:22:54
閉括弧が一個多かった
... (let f n = if n == 1 then 1 else n * f (n-1) in f) ...
238:デフォルトの名無しさん
08/06/09 21:46:25
The Haskell School of Expressionで勉強してます。
この本の解答集のようなもの、ネットには無いでしょうか。
URLリンク(www.elbeno.com)
↑このページは参照してますけど、11章までなので、全部が
まとまったのがあると嬉しいです。
239:デフォルトの名無しさん
08/06/16 14:44:56
ポイントフリースタイルについて質問なんですが、
Haskellでは原理的にどんな関数でもポイントフリースタイルに
変形可能なのでしょうか。
240:デフォルトの名無しさん
08/06/16 15:00:34
うん
241:デフォルトの名無しさん
08/06/16 18:48:23
>>239
Sコンビネータとかもポイントフリーに出来るんだっけか?
242:デフォルトの名無しさん
08/06/16 18:52:01
どの範囲の関数まで使用を認めるかによるな
>>241
Control.Monad.ap :: (Monad m) => m (a -> b) -> m a -> m b
を(->) rモナドについて使えば、Sコンビネータそのもの
243:デフォルトの名無しさん
08/06/17 22:58:00
ポイントフリーのポイントって何?
何が自由なの?
244:デフォルトの名無しさん
08/06/17 23:28:00
ポイント = initial objectからのarrow
ポイントフリースタイル = ポイントを使わない関数定義
245:デフォルトの名無しさん
08/06/18 00:11:23
(Monad m) => m (a -> b) -> m a -> m b
これって未だによくわからないけど
手計算できそうな実例ないですか?
246:デフォルトの名無しさん
08/06/18 00:28:46
あんまり意味ないけど↓こんなのとか?
f :: Monad m => m (a -> b) -> m a -> m b
f mg mx = do { g <- mg; x <- mx; return $ g x }
test1 = f Nothing (Just 1)
test2 = f (Just succ) (Just 2)
test3 = f (Just id) Nothing
test4 = f [] []
test5 = f [id] [5]
test6 = f [id, succ, (* 2)] [6, 9]
247:デフォルトの名無しさん
08/06/18 09:12:38
GHC 6.8.3リリース
248:デフォルトの名無しさん
08/06/18 11:53:17
ナイス
249:デフォルトの名無しさん
08/06/18 14:40:13
>>244
initial object(始対象)じゃなくて terminal object(始対象)だお。
集合の圏で terminal object からの arrow というと一点集合に相当する。
集合の圏では任意の一点集合 x に対して f x = g x ならば f = g
「point(一点集合)を使わずに関数が等しいことを表現できる」=>「ポイントフリー」ということだと思う。
250:デフォルトの名無しさん
08/06/18 18:25:28
>>249
失礼、書き間違えた。
terminal object(終対象)だな。
251:249
08/06/18 18:26:24
× terminal object(始対象)
○ terminal object(終対象)
だった。
252:デフォルトの名無しさん
08/06/20 11:33:25
俺やべぇ
気がついたらポイントフリースタイルで5行も書いてたぜ
これはもはや関数型スパゲッティだな
253:デフォルトの名無しさん
08/06/20 12:48:07
任意のλ式はSKコンビネータで書き換えられるとか言うのを見て
実際に適当なλ式で変換してみたら出てきた式はとても読める
代物ではなかったのを思い出した
254:デフォルトの名無しさん
08/06/20 15:00:42
ありゃ一種の難読化だよな
255:デフォルトの名無しさん
08/06/20 18:06:18
>>253
SKコンビネータも、名前付きにできると若干読みやすそうだけど。
っていうか、それが出来たら、どんな高級言語とも変らんという話になって、逆に面白さがないか。
256:デフォルトの名無しさん
08/06/20 19:22:12
>>255
そこでunlambdaですよ!
257:デフォルトの名無しさん
08/06/21 00:27:42
>>255
つ super combinator
258:デフォルトの名無しさん
08/06/22 17:45:00
以下の関数fをもっと簡単にする方法ありませんか?
f [] = []
f (_:[]) = []
f (x:xs) = (x, head xs) : f xs
259:デフォルトの名無しさん
08/06/22 17:52:53
簡単に、というより再帰を使わずにできませんか?
260:デフォルトの名無しさん
08/06/22 18:05:14
f xs = zip xs (tail xs)
261:デフォルトの名無しさん
08/06/23 18:15:27
f xs = zip xs (drop 1l xs)
262:261
08/06/23 19:03:55
すまん。tail の l を残してしまった。
f xs = zip xs (drop 1 xs)
263:デフォルトの名無しさん
08/06/23 19:21:38
zip [] ⊥ = []
らしいから>>260と>>261は等価かな
こういうのを意識しないといけない場面だと非正格性が気持ち悪い
264:デフォルトの名無しさん
08/06/24 00:09:28
>>263
⊥って勃起してるのw?
265:デフォルトの名無しさん
08/06/24 01:03:13
いやむしろ tail で書けて気持ちいいだろ。
266:デフォルトの名無しさん
08/06/24 06:18:25
>>265
でも
zip (tail xs) xs
と
zip (drop 1 xs) xs
は等価じゃない
つまり、zipでは第一引数が先に評価されるということを覚えていないといけない分、ややこしい
(厳密には評価順の問題じゃなくて「zipは第一引数について正格で第二引数について非正格」ということだけど)
267:デフォルトの名無しさん
08/06/24 07:48:57
>>266 どういうこと?
例えば
f (x1 : x2 : x3 : xs) -> x1 + x3
だったら、引数のリストの最初の要素と3番目の要素について正格ってこと?
268:デフォルトの名無しさん
08/06/24 08:32:09
>>267
そういうつもりで「正格」という言葉を使った
269:初心者修業中
08/06/24 09:53:02
関数結合の(.)って優先順位が高いので、
どうしても括弧が増えて見ぐさい気が…。
こんなのがあったら便利だと思うんですけど、
↓
infixr 1 $.
($.)=(.)
こんな感じ
↓
sigma = tail $. scanl (+) 0
標準ではなさそうなんですが、
やっぱ、問題ありですかね?
270:デフォルトの名無しさん
08/06/24 09:55:22
慣れの問題
271:初心者修業中
08/06/24 10:13:14
ああ、勘違いしてました。
関数の優先順位はどの演算子よりも上ですね。
これで問題ないのか
↓
sigma = tail . scanl (+) 0
>>270
レスありがとうございます。
早く慣れたいです。
まだ、頭で考えないとよくわからない。
(考えてもわからない時ありw)
272:デフォルトの名無しさん
08/06/24 11:35:10
>>266
「厳密には」も何も最初っからそう
273:デフォルトの名無しさん
08/06/24 12:56:24
>>266
> 覚えていないといけない
覚えてなくてもプログラム書くのにはなにも困らない。
等価性とか考えだすと全部正格のほうが楽かもしれんけど。
274:デフォルトの名無しさん
08/06/24 18:49:23
>>273
書くときは良くても読むとき困る
例えば>>260のコードが空リストに対しても正しく動作するかどうか確かめるのに、
いちいちPreludeの仕様を読まないといけない
zipみたいに明確な定義のある関数ならまだいいけど、
例えばhPutStrLn undefined ""の値が
1. ⊥
2. 実行時にエラーになるアクション
3. ()を返すアクション
のどれになるかは仕様では決まっていないはずで、ちょっと厄介
275:デフォルトの名無しさん
08/06/25 15:42:16
>>274
その辺は想像で読めば十分じゃない?
zip xs (tail xs) とあって、
コードを書いたのが信頼できる人なら、
zip は第二引数について非正格なのだろうな、とか。
hPutStr undefined "" も、
hPutStr _ "" = return () と定義されては無いだろうし、
undefined が正しいハンドルじゃないからと
hPutStr が独自にエラーを出すというのも、
先に undefined が評価されるから有り得ないだろう、とか。
hPutStr (error "1") (error "2") にしても error "1" だろう、とか。
276:デフォルトの名無しさん
08/06/25 15:49:33
ム板のやつらはなんでこんなに視野が狭いんだろうといつも思う。
277:デフォルトの名無しさん
08/06/25 17:38:53
3の場合
main「ちょっと undefined に "" 出力してこい」
hPutStrLn「へい」
...数十ns後
hPutStrLn「やってきやした」
main「おまwwww改行どうしたwwwwwwww」
>>276
正直くだらないネタ以外はここではなく他の所に書く。
278:デフォルトの名無しさん
08/06/25 18:27:02
質問です
HaskellでGPGPU関連の話題ってありませんか?
279:274
08/06/25 20:23:02
すまん、hPutStrLnじゃなくてhPutStrじゃないと話が合わないな
>>275
>コードを書いたのが信頼できる人なら、
勉強のためにコードを読んでるならいいけど、
レビューとかデバッグとかしてるならそうはいかないだろ
>hPutStr が独自にエラーを出すというのも、
誤解させたかもしれんが、HugsもGHCも2.の振る舞いをする
実行した時点でundefinedが評価されてエラー発生ね
でも、例えば最適化のために
hPutStr h s = seq h $ ...
みたいな実装になってたら1.だし、
hPutStr h s = mapM_ (hPutChar h) s
みたいな定義が考えられる以上3.もあり得なくはない
結局、非正格がデフォルトなせいで関数の仕様に書かなければいけない事項が多いのが問題
それを不用意にうやむやにすると関数の振る舞いが実装に依存してしまう
それほど頻繁に問題になることではないけど、たまに面倒
280:275
08/06/25 21:28:51
>>279
> レビューとかデバッグとかしてるならそうはいかないだろ
うん。
> hPutStr h s = mapM_ (hPutChar h) s
> みたいな定義が考えられる以上3.もあり得なくはない
なるほど。
> それほど頻繁に問題になることではないけど、たまに面倒
そういうこったね。
281:275
08/06/25 21:32:14
> 誤解させたかもしれんが、HugsもGHCも2.の振る舞いをする
> 実行した時点でundefinedが評価されてエラー発生ね
そういうつもりでしたか。
ちなみにそれだと1.はどういうつもりだったのですか?
282:デフォルトの名無しさん
08/06/25 21:49:44
>>281
hPutStr undefined "" `seq` 0
を評価してエラーが発生すれば1.だよな
実際試したらHugsでもGHCiでもエラーは発生しなかった
283:275
08/06/25 22:26:04
なるほど。というか>>279をちゃんと読んでませんでしたごめんなさい。
284:デフォルトの名無しさん
08/06/26 21:37:05
一通りよく取り上げられる教科書は読んだんですが、Arrowなどの
比較的新しい技法についてわかりやすく書かれた文書はどの辺
でしょうか。
285:デフォルトの名無しさん
08/06/26 23:11:25
本家から辿って論文を読むのがいいと思うよ。
286:デフォルトの名無しさん
08/06/26 23:16:36
Arrow アーーー
287:デフォルトの名無しさん
08/06/26 23:28:26
arrowねぇ・・・イマイチだねぇ・・・
プログラミング的にはこれといってメリットないよ。
288:デフォルトの名無しさん
08/06/27 00:23:45
>>284
URLリンク(www.haskell.org)
289:デフォルトの名無しさん
08/06/28 00:05:34
arrowで量子コンピュータのシミュレーションやってます
めっちゃべんりですっっっっs
290:デフォルトの名無しさん
08/06/28 01:15:42
ユニタリ変換の理解が一つの山かも。
291:デフォルトの名無しさん
08/06/28 01:22:40
ユニタリ変換?高校生でも知ってるよ
292:デフォルトの名無しさん
08/06/28 10:42:43
皆さん、エディタは何使って書いてますか?
293:デフォルトの名無しさん
08/06/28 10:48:09
emacsしか選択肢ないんじゃね?
eclipseは糞だし。
294:デフォルトの名無しさん
08/06/28 11:10:10
vim
295:デフォルトの名無しさん
08/06/28 11:45:12
notepad.exe
296:デフォルトの名無しさん
08/06/28 12:32:37
vimやemacsだと使い勝手のいいプラグインあるんでしょうか。
自分もEclipseはちょっと嫌ですねぇ。
297:デフォルトの名無しさん
08/06/28 12:44:03
URLリンク(www.haskell.org) その他いろいろ
$ hugs -Evim
298:デフォルトの名無しさん
08/06/28 16:06:10
Haskellの構文解析ってどういう風な作りになってるん?
結合性宣言があったりするので、
トークン読んだ時点では構文木を作れないような気がするんだけど。
何かの資料とか、HugsやGHCでの実現方法のソースとかあったら教えてくだしあ
299:デフォルトの名無しさん
08/06/28 16:38:24
>>298
GHCはとりあえず全部左結合として解析(parser/Parse.y)して、
後のrenameのパスで結合性宣言をもとに組み立て直してる(rename/RnExpr.lhs)
300:デフォルトの名無しさん
08/06/28 16:57:55
>>292
俺もvimだわ
なんか文法と相性良さげだし
301:デフォルトの名無しさん
08/06/28 17:16:47
>>299
そういう手があったか。いや、全然関係ないパーサを先日作ってたんだが。
パス(1パスコンパイラとか2パスコンパイラとかのパス)にこだわっていては
非富豪的かねぇ。
302:デフォルトの名無しさん
08/06/28 18:10:34
左結合にするってのは、
とりあえずリンクトリストにしといてから、
あとでパーズしなおすって事。
303:デフォルトの名無しさん
08/06/28 18:39:00
>>292 俺はAgda使ってるよ。結構使いやすい。
304:デフォルトの名無しさん
08/06/28 20:10:12
project eulerに接続できねーぞ!!!
どうなってんだ糞
305:デフォルトの名無しさん
08/06/28 20:19:06
質問です
グラフの研究で路線データ(や道路のデータなど)が使いたいのですが、
そういうデータを手に入れるにはどうすればいいですか?
306:デフォルトの名無しさん
08/06/28 21:47:48
>>305
質問です
Haskellと関係ありますか?
307:298
08/06/28 22:27:19
>>299,302
thx、参考になった。
細かく追えてないけど、かなりがんばらないとparseできないってことか。
308:デフォルトの名無しさん
08/06/29 08:23:28
とりあえず左結合って要するにS式だよね。
309:デフォルトの名無しさん
08/07/01 18:44:49
Real World Haskell
URLリンク(www.amazon.co.jp)
> This easy-to-use, fast-moving tutorial introduces you to functional
> programming with Haskell. Learn how to use Haskell in a variety of
> practical ways, whether it's for short, script-like programs or large
> and demanding applications.
310:デフォルトの名無しさん
08/07/02 02:44:41
中身読めるよ
URLリンク(book.realworldhaskell.org)
表紙が決まったんだね。ヘラクレスオオカブト?
311:デフォルトの名無しさん
08/07/02 03:40:51
後の兜本である。
312:デフォルトの名無しさん
08/07/02 22:40:44
オライリーからHaskellの本が出るなんてありえない。
そう思っていた時期が僕にもありました
313:デフォルトの名無しさん
08/07/02 23:40:42
2008/09
ちょおまw
314:デフォルトの名無しさん
08/07/04 04:55:50
>>310
全30章中残りは3章。
20. The foreign function interface
27. Profiling and tuning for performance
30. A concurrent RESTful web application
書きにくそうなのが残った感じw
315:デフォルトの名無しさん
08/07/09 08:14:01
初心者用のスレで関数型の話をすると罵られる。なぜだろう。
316:デフォルトの名無しさん
08/07/09 12:30:55
初心者には関数型が高尚すぎて理解できないからです。
317:デフォルトの名無しさん
08/07/09 22:36:35
しつもんです
らむだけいさんってなんですか?
318:デフォルトの名無しさん
08/07/09 23:38:52
世界遺産の一種です
319:デフォルトの名無しさん
08/07/09 23:44:40
URLリンク(wwwfun.kurims.kyoto-u.ac.jp)
320:デフォルトの名無しさん
08/07/10 05:32:31
全部ひらがなだとぱっと見、人名かなんかかと思った。羅武田圭さんとか。
321:デフォルトの名無しさん
08/07/10 16:58:13
俺がムラタだ
322:36 ◆K0BqlCB3.k
08/07/11 01:58:31
URLリンク(hackage.haskell.org)
とっとと仕事しろやボケ
323:デフォルトの名無しさん
08/07/11 09:38:42
まあ遅延評価だから
324:デフォルトの名無しさん
08/07/11 10:04:21
等無駄計算
325:デフォルトの名無しさん
08/07/11 16:03:12
>>322
なにエラソーに言ってんだよ。しょーもない評論家なくせして。
326:デフォルトの名無しさん
08/07/19 00:59:56
名村啓?
327:デフォルトの名無しさん
08/07/20 23:31:18
do記法で
'aとか''aとか出てきますが
どのような意味なのでしょうか
328:デフォルトの名無しさん
08/07/21 01:16:27
>>327
具体的なコード書いてみて
329:デフォルトの名無しさん
08/07/21 15:09:50
>>327
a'とかa''じゃなくて?
ちなみにそれならただの変数名だよ。
330:デフォルトの名無しさん
08/07/21 15:13:03
>>329
見直したらそうでした
許してくださいw
ごめんなさい
331:デフォルトの名無しさん
08/07/21 23:32:45
\_ -> k
この\_ってC++のtemplate <t>みたいなもんですか?
332:デフォルトの名無しさん
08/07/21 23:38:07
全然違います
333:デフォルトの名無しさん
08/07/21 23:43:54
>>332
じゃあ何なのでしょうか?
334:デフォルトの名無しさん
08/07/21 23:55:35
URLリンク(www.codelogy.org)
ていうかなんか一冊入門書買うことをおすすめする
335:デフォルトの名無しさん
08/07/22 01:00:32
なんか夏まっさかりって感じ?
336:デフォルトの名無しさん
08/07/22 01:40:52
質問の仕方スレもいるな
Haskellでぐぐっていくつか読めばわかるぐらいのことで
これって型でしょ
違います
じゃあなんなんだよ
つ やさしいHaskell入門
337:デフォルトの名無しさん
08/07/26 19:44:30
おい、おまえらの仲間が「初心者のための〜」スレで暴れてるから早く回収してくれ
338:デフォルトの名無しさん
08/07/26 20:22:33
狂犬に噛まれて狂犬が増えるって
怖くね?
339:デフォルトの名無しさん
08/07/27 01:34:24
あれは仲間じゃない
340:デフォルトの名無しさん
08/07/27 02:01:40
そもそもスレタイからして興味ない話だし。
向こうで完結して。
341:36 ◆K0BqlCB3.k
08/07/27 02:23:52
さて、この夏、何かおもしろいことでもしようかな。
342:デフォルトの名無しさん
08/07/27 10:47:30
お前らの中にアホがいます
他のスレを荒らすならここを荒らしますよ?
343:デフォルトの名無しさん
08/07/27 12:10:53
>>342
ほー、やってみてください。本当にできるのですか?
344:デフォルトの名無しさん
08/07/27 13:11:28
夏厨誕生物語
A 「この夏、何かおもしろいことでもしようかな。」
B 「ならスレ荒らししてみれば?」
A 「簡単にできるのですか?」
B 「こうやれば邯鄲」
A 「ネ申キター!d!マジ面白いね。他スレ荒らしてクルーwktk」
345:デフォルトの名無しさん
08/08/06 05:48:39
注目ワード“高階プログラミング”って何だ?
URLリンク(ascii.jp)
346:デフォルトの名無しさん
08/08/06 06:00:24
>>345
面白かった。サンクス。
347:デフォルトの名無しさん
08/08/06 19:32:59
仕事でHaskellできるなんて羨ましいなぁ。
348:デフォルトの名無しさん
08/08/06 20:30:02
>>345
nobsunだね。
349:デフォルトの名無しさん
08/08/06 20:47:23
ハイカラなシャツ着てる
350:デフォルトの名無しさん
08/08/06 22:06:03
この会社ってホームページ見た感じ普通のSI会社に見えるけど、
山下さんなんかがいるってことは特殊な会社?
Haskellの開発コンサルということだけど、一般企業の業務システム
なんかを対象にしてるのかな。金融系とか合ってそうだけど、
普通の土方システムには豚に真珠かな。
351:デフォルトの名無しさん
08/08/06 22:30:36
>>350
看板役みたいなものだよ。
よくあること。
SRAでも青木淳みたいなのを雇っているけど、青木は普通の仕事はしていないね。
金にならないことを自由にやっているって感じ。
ちなみに、青木の部下はかわいい女の子限定。
352:デフォルトの名無しさん
08/08/07 05:56:03
まあ、天才ならなんでも許されるってことだ。
353:デフォルトの名無しさん
08/08/07 07:30:34
>>351
青木はSRAやめたよ
354:デフォルトの名無しさん
08/08/07 08:39:56
>>345 nobsunのコードは以前からスゲーと思ってたけど、こんな会社のこんな人なんだ。知らなかった。
会社の事業だけ見ると、Haskell関係なさそうだね。Higher Order Programmingってなんだ?造語か?
もっと記事をよく見てみる。
355:デフォルトの名無しさん
08/08/07 08:55:02
>>354
ちょ、おまwww
356:デフォルトの名無しさん
08/08/07 09:12:13
Higher Order Programming: プログラミングを丸投げするためのプログラムを書くこと
357:デフォルトの名無しさん
08/08/07 09:45:57
継続ベースのWebフレームワークってHaskellにもありますでしょうか。
358:デフォルトの名無しさん
08/08/07 12:53:37
>>350
あそこって、gaucheかんけいなひとがおおそうなんだけど。
359:デフォルトの名無しさん
08/08/07 12:58:00
>>358
そりゃそうだ。普通のJaverやC++マが金を取ってこなきゃ、
みんなgaucheとかに走ったら誰が食い扶持を稼ぐんだって。
360:デフォルトの名無しさん
08/08/07 13:19:40
二等兵には二等兵の仕事があるわな。
361:デフォルトの名無しさん
08/08/07 13:46:18
むしろ、パンダと飼育員。
362:デフォルトの名無しさん
08/08/07 13:54:11
俺はまだ士官候補訓練兵だ
363:デフォルトの名無しさん
08/08/07 16:12:52
あの写真を見て
小野伸二を思い出したんだけど。nobsunはやっぱり天才なんですかね。
364:デフォルトの名無しさん
08/08/07 19:03:09
俺は山田ルイ53世を思い出した。すまん>nobsun
ルネッサ〜ンス!
365:デフォルトの名無しさん
08/08/07 19:05:14
あの芸人、この前番組内であからさまにいじめられてたぞ。
最近テレビの前で普通にいじめる先輩芸人が多くないか?
366:デフォルトの名無しさん
08/08/07 19:55:17
そんなことより「Real World Haskell」の発売が10月に延びてる・・・
367:デフォルトの名無しさん
08/08/07 20:41:53
URLリンク(book.realworldhaskell.org)
にある最終章、「A concurrent RESTful web application」が読みたいんだけど、
これは本買わないとダメってこと?
368:デフォルトの名無しさん
08/08/07 21:15:32
最近少しずつ読み進めていたんだが
そうか、本になるのか…買おうかな>RealWorldHaskell
369:デフォルトの名無しさん
08/08/07 23:21:20
RealWorldHaskellってHaskellの批判本なのに
なんでみんな買うの?
こんなにHaskellって腐ってます
ゴミですって随所に書かれているのにw
370:デフォルトの名無しさん
08/08/07 23:24:06
買おうかなと言ったのが一人いるだけなわけだが
脳内カウンターが回りまくりですかな
371:デフォルトの名無しさん
08/08/08 00:09:00
ん?批判本なんだ?
372:デフォルトの名無しさん
08/08/08 00:12:48
そう思っている人がいるかどうかは定かではないですが、
そう書き込んだ人間が一名いるようです。
また、買おうかなと書き込むことと買うことは別です。
プログラマたる者、このくらいの論理性は持って欲しいです。
部分と全体を混同するなんて、継承に毒されすぎです。
373:デフォルトの名無しさん
08/08/08 02:02:00
>>372
論理じゃなくて、揚げ足取りっていいませんか?
買おうかなと書き込んだということは、買う意思が比較的強いということでしょう。
0か1かじゃないんですよ。
物事は確率的なのです。
374:デフォルトの名無しさん
08/08/08 02:42:06
>>373
> 買おうかなと書き込んだということは、買う意思が比較的強いということでしょう。
著作権者や出版社勤務者が宣伝のために書いたかも知れませんよ
375:デフォルトの名無しさん
08/08/08 02:42:51
>>374
そういう可能性もある。
確率の問題。
376:デフォルトの名無しさん
08/08/08 02:50:39
>>369
ソース
>>370
君が一人しか見てないだけ
377:デフォルトの名無しさん
08/08/08 03:20:20
>369
>Throughout this book, we're going to show you how Haskell's
alternatives to the features of traditional languages are more
powerful, more flexible, and safer. Haskell is positively crammed
full of cutting edge ideas about how to create great software.
(chap1 power)
と最初のところでかいてるけど、なぜ批判本と?
どこをさしていってるの?
378:デフォルトの名無しさん
08/08/08 03:22:29
なんとなくpractical common lispのhaskell版と言う印象なんだけどな。
オレイリーから関数型言語ぼんが出るのは初めてじゃ内科?
国内ではgauche本があるがね。
379:デフォルトの名無しさん
08/08/08 03:42:03
フランスではocamlの本が出てた
380:デフォルトの名無しさん
08/08/08 11:58:00
washって継続ベースなの?
381:デフォルトの名無しさん
08/08/08 14:34:11
>>379マジだ
URLリンク(www.amazon.fr)
フランスでは流行ってるんだな
382:デフォルトの名無しさん
08/08/08 14:42:46
感覚的には日本のRubyと同じ感じじゃないすかね。
383:デフォルトの名無しさん
08/08/08 16:16:02
>>381
いつの本の話してんだか。
この本の和訳プロジェクトはつぶれたね。
384:デフォルトの名無しさん
08/08/08 19:15:39
>>382
全然違う。Rubyは世界的にPythonを急追している。
385:デフォルトの名無しさん
08/08/08 23:55:14
急追して、、いたけど結局ダメだった、というのが現在のところだよ
俺も1.9がちゃんとしたモノになるまではrubyは使うべきではないと思う。
386:デフォルトの名無しさん
08/08/08 23:59:16
そうか?
そもそも本当に10月に発売できるか分からんぞ。
387:デフォルトの名無しさん
08/08/09 00:21:55
コレすでに3回発売日伸びてる
年内出れば御の字
388:デフォルトの名無しさん
08/08/09 00:33:37
>>385
それがほんとかなぁ。とおもってgoogle trendsでruby,python,perlの検索数を比較させて
みたけど、国によって微妙に違うね。
usaなら、2006ねんごろからperlが凋落しきって、python,rubyとならんで、2006中頃から、
rubyが一歩抜けて、perl,pythonが同等になっていた。
italyは、同じような時期にperlが落ちてきてるけど、pythonがかなり強くって、perlとruby
が同等
japanが、perlの凋落が進んできてるけど、usaやitalyほどではなくて、一番ですね。2番め
がrubyで徐々に増えてる。pythonは完全に横ばい。
chinaはpythonの伸びがかなり強い。そんなにrubyは使われてない。
indiaは日本と傾向が似てるな。
israelはrubyは絶滅ぎみ。
google全体ではrubyが一番強くなってきてるけど、これはusaでのruby人気が支えてる
ような感じだな。europaとchinaではpythonが強く、それ以外の国ではperlが強いかな。
389:デフォルトの名無しさん
08/08/09 04:23:59
>>384
世界的にみても、わかって言語を選んでいる人よりも
バズワード追ってるだけの人のほうが多いからね。
390:デフォルトの名無しさん
08/08/09 06:09:31
Haskellって本当にLLって言っていいのかな。
基本コンパイラだし、インタプリタも軽量とは言い堅いし。。。
391:デフォルトの名無しさん
08/08/09 06:13:31
LLじゃないだろw
392:デフォルトの名無しさん
08/08/09 08:06:03
> 基本コンパイラだし
GHCばかり取り上げられてHugs涙目
393:デフォルトの名無しさん
08/08/09 08:07:11
>>392
そんなあなたをはぐはぐ。w あーっ!ではないよ。
394:デフォルトの名無しさん
08/08/09 08:22:00
初心者なんですが、Haskellが型については静的であることを選択した
理由って何かあるんでしょうか。純粋であることや遅延評価が、静的
型やコンパイル時の最適化を要請するということなんでしょうか?
395:デフォルトの名無しさん
08/08/09 08:27:55
GHCはHaskell解釈系ランキング第一位!
「やっぱりGHCだね」
396:デフォルトの名無しさん
08/08/09 09:06:49
>>394
静的なのは、最適化も大きいだろうけど、
むしろ安全性を狙ってるという要素が大きいんだろう。
遅延評価なのはコンパイル時の最適化にプラスなのかなぁ?
これは理論的に停止できる関数は必ず停止できるっていう、
これまたある種の安全性?が主な目的だと思うけど
( if true (answer foo) (nonStop baa) ) みたいな文を考えよう(Haskellの文法忘れたから適当)。
397:デフォルトの名無しさん
08/08/09 10:14:15
別に"動的型付け-純粋-非正格-インタプリタ型"の関数型言語もあり得るよな
効率はどうなんだろう、"動的型付け-正格"の言語よりさらに遅いことは想像が付くが
398:デフォルトの名無しさん
08/08/09 10:28:23
>>394
Goferがそうだったから。
で、なんでGoferがそうだったのかというと、Mirandaがそうだったから。
399:デフォルトの名無しさん
08/08/09 10:37:45
>>396
遅延評価は最適化にマイナスだよ。少なくともメモリ空間の最適化には全く向かない。
400:デフォルトの名無しさん
08/08/09 10:44:26
遅延評価なんて
今日はやらない
401:396
08/08/09 10:50:37
>>399
そうだよね。
コンパイル技術がすげー発達して高速になれば、話は変わるだろうけど。
(まぁ、コンパイル技術が「すげー発達」すれば、どのコンパイル言語でもマシン語と同じスピードが出るんだから、意味ない話)
あと「理論的に停止できる関数は必ず停止できる」は意味不明だとか、
文じゃなくて式だとか、気づいたけど後の祭り、いわゆるアポステオリorz
402:デフォルトの名無しさん
08/08/09 11:02:51
>>395
Guarded Horn Clauses
403:デフォルトの名無しさん
08/08/09 11:31:02
手続き型言語は、ノイマン型計算機を抽象化することで生まれてきたので、
評価方式としては、式、文の逐次的解釈が当然になる。
関数型言語は、ラムダ式から出て来たから、
その評価形式をどうするかというのが一つのポイントになる。
遅延評価は最左最外簡約の研究から出て来た。
効率がどうのこうのというより、
新しいプログラミングパラダイムを産み出したので、
(例えば無限リスト、無限木の積極的利用)
研究され続けているんだと思う。
404:デフォルトの名無しさん
08/08/09 11:32:55
>>402
GLOBAL HONORED CROWN URLリンク(www.noah.co.jp)
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5212日前に更新/225 KB
担当:undef