トップページtech
1001コメント285KB

関数型プログラミング言語Haskell Part22

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2013/03/23(土) 12:34:19.09
haskell.org
ttp://www.haskell.org/

日本語サイト
ttp://www.sampou.org/cgi-bin/haskell.cgi
ttp://www.shido.info/hs/

過去ログ
関数型プログラミング言語Haskell
Part1 ttp://pc.2ch.net/tech/kako/996/996131288.html
Part2 ttp://pc2.2ch.net/test/read.cgi/tech/1013846140/
Part3 ttp://pc8.2ch.net/test/read.cgi/tech/1076418993/
Part4 ttp://pc8.2ch.net/test/read.cgi/tech/1140717775/
Part5 ttp://pc8.2ch.net/test/read.cgi/tech/1149263630/
Part6 ttp://pc11.2ch.net/test/read.cgi/tech/1162902266/
Part7 ttp://pc11.2ch.net/test/read.cgi/tech/1174211797/
Part8 ttp://pc11.2ch.net/test/read.cgi/tech/1193743693/
Part9 ttp://pc11.2ch.net/test/read.cgi/tech/1211010089/
Part10 ttp://pc12.2ch.net/test/read.cgi/tech/1231861873/
Part11 ttp://pc12.2ch.net/test/read.cgi/tech/1252382593/
Part12 ttp://hibari.2ch.net/test/read.cgi/tech/1272536128/
Part13 ttp://hibari.2ch.net/test/read.cgi/tech/1286706874/
Part14 ttp://hibari.2ch.net/test/read.cgi/tech/1299385928/
Part15 ttp://hibari.2ch.net/test/read.cgi/tech/1310199414/
Part16 ttp://toro.2ch.net/test/read.cgi/tech/1317958045/
Part17 ttp://toro.2ch.net/test/read.cgi/tech/1325510368/
Part18 ttp://toro.2ch.net/test/read.cgi/tech/1331902463/
Part19 ttp://toro.2ch.net/test/read.cgi/tech/1340760070/
Part20 ttp://toro.2ch.net/test/read.cgi/tech/1350428908/
Part21 ttp://toro.2ch.net/test/read.cgi/tech/1358702176/
0159デフォルトの名無しさん2013/04/07(日) 10:55:35.29
最近は初めてのプログラミング言語にHaskell選ぶのが流行ってるのか
0160デフォルトの名無しさん2013/04/07(日) 11:07:50.45
普通にまずJavaでもやっとけば良いのに
初心者ほど最強言語とか訳分からん理由で選ぶからな
挫折する姿が目に浮かぶようだ
0161デフォルトの名無しさん2013/04/07(日) 11:10:10.27
>>156
ありがとうございます。
0162デフォルトの名無しさん2013/04/07(日) 11:24:27.03
>>159
はい。それが王道となりつつあります。
0163デフォルトの名無しさん2013/04/07(日) 11:33:13.63
やっとHaskellも上に出てるようなクソコード製造機になれるのか。胸熱だな
0164デフォルトの名無しさん2013/04/07(日) 11:33:36.63
C言語の某定番教科書はポインタと構造体の解説が延々と続く。

正直、あんなもの勉強するくらいなら最初からHaskellでリスト処理を学ぶ方が良い。
0165デフォルトの名無しさん2013/04/07(日) 11:42:44.91
>>157
そこは勘弁。
>>158
華麗なコード書きたいけど、どうしても無理。
ラムダに行く前にまだまだ練習が必要だと思う。
0166デフォルトの名無しさん2013/04/07(日) 11:55:33.26
>>164
まあ、C の言語仕様はシンプルだからな
はっきり言って、知的好奇心をそそるものではないよね
C++ の template は、そこそこ面白いんだけど、実践言語であれは無いだろとも思う
0167デフォルトの名無しさん2013/04/07(日) 11:59:35.78
Haskellでスペースリークを潰して廻るのは
Cでメモリリークを潰して廻るより苦痛だけどな

まあトイプログラムで遊んでるレベルじゃ関係ないけど
0168デフォルトの名無しさん2013/04/07(日) 12:01:03.15
value xs = map (/ ave xs) xs
ave xs = sum xs / fromIntegral (length xs)
0169デフォルトの名無しさん2013/04/07(日) 12:08:22.39
えっ、Haskellでトイプログラムじゃないプログラムを書いてる人なんて居るの?
0170デフォルトの名無しさん2013/04/07(日) 12:11:14.14
>>168
残りリスト要素の平均じゃなかったの。
0171168だけど日本人じゃないから変な日本語は許してな2013/04/07(日) 12:19:59.77
>>170
そうだったな、すまん
value xs = zipWith (/) xs (map ave (tails xs))
0172デフォルトの名無しさん2013/04/07(日) 14:01:10.42
>>164
>C言語の某定番教科書はポインタと構造体の解説が延々と続く。
どれ?
0173デフォルトの名無しさん2013/04/07(日) 14:10:23.37
ポインターを考えなくてすむ代わりに別の追加の概念注意しなきゃならないなら
俺はよりコンピュータの本質に近い方を選ぶ
0174デフォルトの名無しさん2013/04/07(日) 14:14:32.28
let ! や $! や $!! でサンクを潰して廻るのは
コンピュータの本質に近く無いと申すか


確かにそうですね
0175デフォルトの名無しさん2013/04/07(日) 15:17:04.03
>>173
そのコンピュータというのがハードの事なら、より近いのはC言語だな
もし計算を意味するのならHaskellの方が近いな
0176デフォルトの名無しさん2013/04/07(日) 15:42:26.12
ほう、ループよりも再帰の方が計算の本質にちかいと申すか?
たんなる理論的なからくりだろう>再帰
0177デフォルトの名無しさん2013/04/07(日) 17:56:41.74
本質なんて言葉を使ったらダメだよ。

チューリングマシンとラムダ計算のどちらが本質か、だなんて誰にも決められない。
0178デフォルトの名無しさん2013/04/07(日) 18:15:01.36
本質言うならCPUと密接なCに決まってる
0179デフォルトの名無しさん2013/04/07(日) 18:44:06.43
CPUが本質だってんならループでも再帰でもなく条件ジャンプが本質だw
0180デフォルトの名無しさん2013/04/07(日) 18:51:44.96
>>176
そもそも自然数が再帰の構造なんだから
0181デフォルトの名無しさん2013/04/07(日) 19:11:30.89
ペアノの公理も単なる理論上のからくりというか‥‥実用上でなにかうれしいことでもあるのか?
0182デフォルトの名無しさん2013/04/07(日) 19:32:57.56
>>181
自動定理証明に応用できる
0183デフォルトの名無しさん2013/04/07(日) 19:46:45.41
お前らってアセンブラやったことないの?
0184デフォルトの名無しさん2013/04/07(日) 20:01:24.84
アセンブラみたいな具体的さが本質なのか、抽象が本質なのか、誰にも決められん。

最近流行ってるのは抽象による形式手法だけど、C言語ベースでの形式手法も研究されてるし。
0185デフォルトの名無しさん2013/04/07(日) 20:27:08.19
抽象の方が変更に強いからな。
実践では抽象しないと開発が間に合わないんだよね。
0186デフォルトの名無しさん2013/04/07(日) 20:52:52.11
ソースが紛失して2000年問題のときに機械語編集してた思い出
0187デフォルトの名無しさん2013/04/07(日) 20:55:39.32
>>186
マジで?!
0188デフォルトの名無しさん2013/04/07(日) 21:39:37.77
それはSys/370(互換機)の機械語かな?
0189デフォルトの名無しさん2013/04/08(月) 02:21:59.09
プログラミングをコンピュータと人間との通信と考えると、言語列の長さとその通信の平均誤り率いう視点から機械語と高級言語に本質的な違いが出てくる
0190デフォルトの名無しさん2013/04/08(月) 04:39:05.59
>>184
本物の形式手法は抽象度の高い仕様から
Adaサブセットやアセンブリまでをカバーして
それぞれのレベルでテストや証明をした上で
相互にトレーサブルにする。

つまり、どっちも本質。
0191デフォルトの名無しさん2013/04/08(月) 06:43:16.27
コンパイラやリンカのテストや証明もつくのかそれは本格的
C/C++等の抽象度が低い、というのが今ひとつ理解できないのだが、この場合の抽象度とは何を意味するのだろうか?
言い換えるとC/C++でも抽象度が高い記述があるのだろうか?

抽象度が高い=ての込んだ複雑な「からくり」がついただけ、という史観はそろそろカビが生えてきたようだ‥‥
0192デフォルトの名無しさん2013/04/08(月) 11:15:43.10
C言語だと、式の世界は比較的に抽象度が高い。
副作用のない関数と式の組み合わせで書けるものはそう書いたほうが良いね。
0193デフォルトの名無しさん2013/04/08(月) 19:47:50.78
>>192
fortranの設計者(バッカス先生)はチューリング賞講演で、
fortranの中で意味があるのは代入文の右辺だけだと言ってた。
0194デフォルトの名無しさん2013/04/08(月) 22:31:21.02
抽象度が高いってのはそれだけレイヤ踏んでるんだからハードウェアの本質から遠ざかってるだろ
0195デフォルトの名無しさん2013/04/08(月) 22:34:50.48
レイヤ?それは計算モデルではなく実装の話だろうが。
計算モデルにはレイヤなんて概念は存在しないw
0196デフォルトの名無しさん2013/04/08(月) 22:59:54.66
だから実装の話だよ何聞いてんだ
実装に実装を重ねてハード寄りの泥臭さから遠ざかったところに高級言語があるんだから
ハードウェアの本質がそこにあるはずがないって話
0197デフォルトの名無しさん2013/04/08(月) 23:06:44.08
ハードは泥臭くない
ゲーデル数が数学の定理に比べて泥臭くないのと同じ

むしろ洗練されている
0198デフォルトの名無しさん2013/04/08(月) 23:17:35.81
例えばI/Oポートにアクセスしたあとnop並べないといけないじゃない
そういうのが洗練されてるって言うつもりでいる?
0199デフォルトの名無しさん2013/04/08(月) 23:21:24.73
>>198
高水準言語で見ればnop並んでる
最も低水準の機械語で見ればコードの端から端まで2進数というたった一種類に抽象化された数が並んでるだけ
0200デフォルトの名無しさん2013/04/08(月) 23:25:00.57
それは屁理屈だよ
0201デフォルトの名無しさん2013/04/08(月) 23:47:58.93
Haskellスレはマ板に移った方がいいな
0202デフォルトの名無しさん2013/04/09(火) 01:01:33.08
アホを構う大馬鹿がいるからな。
0203デフォルトの名無しさん2013/04/09(火) 01:17:36.25
0204デフォルトの名無しさん2013/04/09(火) 01:25:49.73
コンピュータが人間だったら、機械語こそがもっととも抽象化されてて自然言語にもっとも近い言語なんだよね?
0205デフォルトの名無しさん2013/04/09(火) 01:37:28.97
自然言語が上手く抽象化されてるとは限らなくね
最強の俺言語として生まれたハングルを指して言ってるならあれだけど
0206デフォルトの名無しさん2013/04/09(火) 02:12:20.33
コンピュータ人間にとっては、自然言語(機械語)こそが最高に抽象化された言語
語の列を元と同じ動作をする範囲で抽象化して再び提示しても元の語の列になるという意味で

語の列が抽象化という作用により不動になるプログラミング言語を完成させたとき、その言語は機械語と同型である
0207デフォルトの名無しさん2013/04/09(火) 02:20:52.25
誰か>>206を翻訳してくれ
日本語で書いてあるはずなのに、意味が分からないんだ
0208デフォルトの名無しさん2013/04/09(火) 02:28:04.88
あるプログラミング言語の任意のソースコードを同じ動作をするように抽象化したら、元のソースコードと変わらない
そのプログラミング言語は機械語である
ゆえに機械語こそが最高に抽象化された言語である
0209デフォルトの名無しさん2013/04/09(火) 02:40:44.15
機械語は抽象されてるよ
実際、機械語の操作的意味論の美しさといったら…
0210デフォルトの名無しさん2013/04/09(火) 06:00:31.60
言葉遊びと拡大解釈はファウルだよ
0211デフォルトの名無しさん2013/04/09(火) 07:09:20.20
>>208
はっきり言って、なにを言っているのかわからない。
0212デフォルトの名無しさん2013/04/09(火) 22:33:26.37
また始まるのか
0213デフォルトの名無しさん2013/04/09(火) 22:59:28.84
いつもの人かな?
0214デフォルトの名無しさん2013/04/10(水) 00:12:02.18
いつもの人というのは俺の事なんで、そいつは別人だ
0215デフォルトの名無しさん2013/04/10(水) 00:15:45.44
>>214
匿名とはいえ、失礼いたしました。(_O_)
0216デフォルトの名無しさん2013/04/10(水) 00:29:33.56
>>214
何とかしてくれよ
0217デフォルトの名無しさん2013/04/10(水) 01:21:41.46
拡大解釈=抽象化
言葉遊び=プログラミング
0218デフォルトの名無しさん2013/04/12(金) 00:00:06.73
ほらつまんないレスするからスレ止まったじゃん
0219デフォルトの名無しさん2013/04/12(金) 00:19:25.55
Monadのインスタンスにしたら自動的にFunctorやApplicativeのインスタンスにしてくれる機構ってある
無いよね?
0220デフォルトの名無しさん2013/04/12(金) 05:05:31.67
【議題】
Monad ⊂ Functor みたいにサブクラス宣言があればいいのに
0221デフォルトの名無しさん2013/04/12(金) 07:01:04.05
そんな宣言が有ったらreturnが要らない子になるだろ!
0222デフォルトの名無しさん2013/04/12(金) 10:08:01.28
要らないなのはどう見てもfailの方なんだが
なんだそれふざけてるの
0223デフォルトの名無しさん2013/04/12(金) 22:34:40.22
return はいらない子
むしろ有害
0224デフォルトの名無しさん2013/04/12(金) 23:37:48.82
ポカーン
0225デフォルトの名無しさん2013/04/13(土) 01:12:51.31
*Main> (\m -> m (++"z")) . runCont $ do { x<- Cont $ \f -> f . f $ "a"; y<- Cont
$ \g -> g . g $ "b"; return $ x++y; }
"aabzzaabzzbzz"
色々実験してるけどContモナドが継続の意味も含めさっぱり分からない…
0226デフォルトの名無しさん2013/04/13(土) 10:13:06.61
ttp://pllab.is.ocha.ac.jp/~asai/cw2011tutorial/
これのHaskellの部分は見た?
0227デフォルトの名無しさん2013/04/13(土) 12:11:28.44
ありがとうございます
良さそうなpdfをリンクから見つけたので読んできます
http://pllab.is.ocha.ac.jp/~asai/cw2011tutorial/main-j.pdf
0228デフォルトの名無しさん2013/04/13(土) 18:46:31.54
リワハ以上専門家未満のライブラリ教えろ
0229デフォルトの名無しさん2013/04/13(土) 18:50:38.00
うっさい
0230デフォルトの名無しさん2013/04/13(土) 20:26:57.25
>>228
リワハのライブラリって何?
0231デフォルトの名無しさん2013/04/13(土) 20:44:44.28
リアルワールドハスケルのことだろう
0232デフォルトの名無しさん2013/04/13(土) 22:20:41.84
いや、だからリアルワールドハスケルの「ライブラリ」って何よ
0233デフォルトの名無しさん2013/04/13(土) 22:23:49.48
Bloom filterより複雑めなアルゴリズムとかじゃね(適当
まあ接続詞が1つしかない文章にこれ以上突っ込んでも仕方ない気がするけど
0234デフォルトの名無しさん2013/04/14(日) 15:38:54.38
ごめんなさい
0235デフォルトの名無しさん2013/04/14(日) 17:49:32.35
なんで謝る?もっと謝って
0236デフォルトの名無しさん2013/04/14(日) 18:38:09.36
/⌒ヽ    ごめんなさい
く/・ ⌒ヽ
| 3 (∪ ̄]
く、・ (∩ ̄]
0237デフォルトの名無しさん2013/04/14(日) 22:23:52.55
可愛らしい顔文字だというのは分かるが
2ちんこ1金玉だな
0238デフォルトの名無しさん2013/04/15(月) 15:04:25.83
 /⌒ヽ    ごめんなさい
く/・ ⌒ヽ
 | 3 (∪ ̄]
く、・ (∩ ̄]
0239デフォルトの名無しさん2013/04/17(水) 02:08:13.62
Prelude> let f a b c = (a,b,c)
Prelude> f 1 2 3
(1,2,3)
Prelude> (1 `f`) 2 3
(1,2,3)
Prelude> (`f` 2) 1 3
(1,2,3)
Prelude> let g = (`f` 2)
Prelude> 1 `g` 3
(1,2,3)
Prelude> let h = (`g` 3)
Prelude> h 1
(1,2,3)
0240デフォルトの名無しさん2013/04/17(水) 13:01:01.94
(`f` y) x === x `f` y === f x y
ったりめえだとしか言い様がないんですが
あと、
f = (,,)
0241デフォルトの名無しさん2013/04/17(水) 23:21:25.37
何を主張したかったのかがわからない
0242デフォルトの名無しさん2013/04/17(水) 23:26:23.89
HaskellやっててCategoryの勉強し始めた奴っている?
0243デフォルトの名無しさん2013/04/17(水) 23:30:06.01
-- n ^ 2 steps
rev :: [a] -> [a]
rev (x:xs) = rev xs ++ [x]
rev [] = []

-- n steps
reverse' :: [a] -> [a]
reverse' = foldl prefix []
where prefix xs x = x : xs

foldr, flodlの働きがいまいちわからない。
0244デフォルトの名無しさん2013/04/17(水) 23:40:33.41
チラシの裏に自分の手で簡約の様子を書くことを面倒くさがると何も理解できん
0245デフォルトの名無しさん2013/04/17(水) 23:58:13.13
わかった。やってみる.
0246デフォルトの名無しさん2013/04/18(木) 22:10:36.22
foldlをfoldrで書けたら単位認定
0247デフォルトの名無しさん2013/04/18(木) 22:20:10.59
効率を考えなければreverseやって引数の順番変えればOK
0248デフォルトの名無しさん2013/04/19(金) 04:47:17.13
foldrの末尾再帰放棄してまで欲しいものって短絡?
0249デフォルトの名無しさん2013/04/19(金) 05:17:43.69
アキュムレータ使いたがるのは駄目なのか。
haskellの人は賢くてポイントフリーや既存の関数を使いまわすのが得意な人が多いせいか、
他人のコードはperlのワンライナーに似た難読性がある。
0250デフォルトの名無しさん2013/04/19(金) 20:24:23.77
遅延評価だから、リストを受け取って、その先頭を見て目的のリストの先頭だけ作って、
残りは自分自身に再帰、みたいな構造にしたほうがいいよ、という仕掛け。

でも慣れるまでは気にせずLispやMLでやるみたいに補助変数に溜め込むコードを
書いてればいいんじゃないかと思うけど。
0251デフォルトの名無しさん2013/04/19(金) 20:38:58.17
foldrなら短絡とアキュムレータ両方同時に使えるよ
0252デフォルトの名無しさん2013/04/19(金) 21:12:55.90
原始再帰関数とfoldrとの関係を答えられたら単位認定
0253デフォルトの名無しさん2013/04/20(土) 06:56:48.03
ぱらもるふぃずむ
0254デフォルトの名無しさん2013/04/23(火) 04:52:34.04
Windows2000に対応してますか?
0255デフォルトの名無しさん2013/04/23(火) 21:59:42.01
まず Windows2000 を探してきます
0256デフォルトの名無しさん2013/04/24(水) 01:15:26.74
まてよ、Windows2000を定義するほうが先だろ
0257デフォルトの名無しさん2013/04/24(水) 04:51:10.38
Windows2000,副作用なしで定義できるもんかね?
0258デフォルトの名無しさん2013/04/25(木) 02:09:17.88
致命的なバグがなくならなかったという意味でWindows2000はまだ完成していない
■ このスレッドは過去ログ倉庫に格納されています