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

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

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん2013/01/21(月) 02:16:16.07
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/
0951デフォルトの名無しさん2013/03/21(木) 11:25:55.85
インフラ系は40年前のソフトのメンテやバージョンアップが主業務なんてのはザラでして…
0952デフォルトの名無しさん2013/03/21(木) 12:03:44.35
大勢が憧れている安定した大企業の勝ち組IT土方の実態というものか
0953デフォルトの名無しさん2013/03/21(木) 12:10:32.77
大企業Disのブームはもう終わりましたよ
0954デフォルトの名無しさん2013/03/21(木) 12:17:28.01
冷静に考えたら、製品の劣化なし完全コピーが可能なんだから、新言語が普及しないのは当然
開発用ツールのスクリプトがタケノコみたいにポコポコ出てくるのも当然
0955デフォルトの名無しさん2013/03/21(木) 13:32:36.37
>>954
0956デフォルトの名無しさん2013/03/21(木) 20:16:20.82
メンテ用ツールか、旧言語のコードの自動生成しか新言語の活躍の場はない
0957デフォルトの名無しさん2013/03/21(木) 21:23:29.51
実行は速いがコンパイルは遅いという伝統を踏襲しなかったから、スクリプトは新しい
相変わらずコンパイルが遅い言語はどこが新しいのか分かりにくい
0958デフォルトの名無しさん2013/03/21(木) 22:49:33.70
今更だけどここのスレタイってあんまりよくないよな
言語の名前は最後じゃなくて頭のほうに持ってきてほしい
0959デフォルトの名無しさん2013/03/21(木) 23:00:29.25
Haskell part 21 : 歴史
0960デフォルトの名無しさん2013/03/22(金) 13:32:02.69
いいねえ
0961デフォルトの名無しさん2013/03/22(金) 21:48:04.93
>>584に書いたパルズ解答ソフトについて。

以前にC++で作ったソフトをHaskellで作りなおしてみた。
なんとか完成させ、新しい機能もちょっと追加。
とりあえず作った…。これから修正していこうと思う。

ソースコードサイズ(両方ともに未参照コード含む)
C++版 167kB
Haskell版 54kB

計算時間
C++版 1.77秒
Haskell版 38.2秒
09629612013/03/22(金) 21:48:55.34
感想。
コードは短くなったけれども、思ったより短くない。
C++版とHaskell版は、両方ともスパゲッティ状態。
Haskellのほうが短いとはいえ、スパゲッティ状態もまた
濃縮されているようなものだ。

Haskell版のほうが計算時間が長いのは仕方ない。
"はじめてのHaskell"ではね・・。
これから改善して2秒以内にするのを挑戦してみる。
0963デフォルトの名無しさん2013/03/22(金) 21:50:26.93
パルズ!
09649612013/03/22(金) 22:31:56.28
>>963
「パズル」の間違いです。

「プログラミングin Haskell」は最後まで読んだ。
「すごいHaskell楽しく学ぼう」は、今200ページ前後を読んでいる最中。あと半分・・。
0965デフォルトの名無しさん2013/03/22(金) 23:19:11.19
バルス
0966デフォルトの名無しさん2013/03/22(金) 23:20:34.18
前者を先に読むのってどうなんだ
++がくっ付いた記号とかλとか→とか⇒とか
記号がおかしくて初心者は実際に全角を入力するし頭おかしいよあの本
2冊目としては良書なんだけどなんで記号使ってんだボケって言いたい
0967デフォルトの名無しさん2013/03/22(金) 23:51:54.62
>>966
Haskell系の論文だと、そういう記号わんさか出てくるな。

著者も研究者だし、この本もどちらか言うと
関数プログラミングを学問として学ぶ系だと思うよ。
0968デフォルトの名無しさん2013/03/22(金) 23:53:26.79
実用書じゃないオナニー本ってこと。
0969デフォルトの名無しさん2013/03/22(金) 23:54:35.26
すごいHaskell〜も分かった気になるだけの本だしなあ
0970デフォルトの名無しさん2013/03/22(金) 23:55:03.81
嫌な言い方をする人はコードも嫌な感じ
0971デフォルトの名無しさん2013/03/22(金) 23:58:41.14
>>970すごい本のこと?
確かになんかネラー臭のする言葉がたまに出るけど…
0972デフォルトの名無しさん2013/03/22(金) 23:59:34.32
>>966
日本語版は巻末に書中で使われている記号と実際の入力方法の対応表が巻末に付いてるし
そこまで怒るようなものでもないんじゃないか
0973デフォルトの名無しさん2013/03/23(土) 00:05:06.89
>>971
勘違いするな

>>968 のことだ
0974デフォルトの名無しさん2013/03/23(土) 00:11:08.89
プログラミングHaskellは単にIFPHに倣っただけだろ
0975デフォルトの名無しさん2013/03/23(土) 00:13:50.62
>>973
いや、学問は知識欲を満たすためのオナニーだよ。
0976デフォルトの名無しさん2013/03/23(土) 00:35:43.48
記号の凡例は前書きや巻末にひっそりと載ってるから物言いがつくんじゃね
本文第一章あたりで堂々と説明しとけば初学者でも迷わないと思う
0977デフォルトの名無しさん2013/03/23(土) 00:54:56.29
誰かモナデウスのソースコード解説を
0978デフォルトの名無しさん2013/03/23(土) 01:02:35.32
すごいHaskellは原文からしてあの口調だからな
しかしそこがいい
0979デフォルトの名無しさん2013/03/23(土) 05:14:06.88
つい最近立ったと思ってたのになんでもう埋まりそうなんだよ
0980デフォルトの名無しさん2013/03/23(土) 07:29:02.39
getで出したリストの値をcouで使用。get [1,3,4,3,4,7,4]->[4,4,7,4]
それでcouでそのリスト内の4の数を求めたい。しかし、返された値は0。なぜ?

get :: [Int] -> [Int]
get list = case (list) of
[] -> []
(x:xs) -> [x | x <- xs, x > 3]

cou :: [Int] -> Int
cou (list) = case (get list) of
[] -> 0
(x:xs) -> case (x > 3) of
True -> 1 + cou xs
_-> cou xs
0981デフォルトの名無しさん2013/03/23(土) 07:40:52.02
ごめん日本語の部分がよく分からない
ちゃんと順序立てて言葉足らずにならないように説明してよ
0982デフォルトの名無しさん2013/03/23(土) 08:56:08.27
すごいH、完全にLand of Lispに食われたなw
0983デフォルトの名無しさん2013/03/23(土) 09:14:01.92
>>981
getは数値が3以下の数全てを除いたリストを返したい。例えばget[1,4,6,2,4,1]のリストは[4,6,4].
そして、couの関数でgetの返されたリスト([4,6,4])の中に何個’4’の数があるか?を数えたい。この場合[4,6,4]には4が二つあるので2を返してほしい。
cou [2,5,4,3,4] >> 2
式が間違ってました。

get :: [Int] -> [Int]
get list = case (list) of
[] -> []
(x:xs) -> [x | x <- xs, x > 3]

cou :: [Int] -> Int
cou (list) = case (get list) of
[] -> 0
(x:xs) -> case (x ==4) of
True -> 1 + cou xs
_-> cou xs
0984デフォルトの名無しさん2013/03/23(土) 09:28:34.82
貼ってみたらちゃんと動いてるみたいだけど。。。
http://codepad.org/RlPkEbhg
0985デフォルトの名無しさん2013/03/23(土) 10:40:38.45
これでいいの?
*Main> get [4,4,5]
[4,5]
*Main> get [4,5,4]
[5,4]
*Main> get [1,4,6,4,2]
[4,6,4]
*Main> get [4,6,4,2]
[6,4]
*Main>
0986デフォルトの名無しさん2013/03/23(土) 10:50:27.19
わざわざありがとうございます。
getが何か変だと思い始めてます。
Main> get [3,4,2,4,5,4]
[4,4,5,4]
Main> cou [4,4,5,4]
2 -- 3を返して欲しい所

こんな感じになってしまいます。
get [4,4,5]の戻りはなぜ[4,4,5]ではなくて[4,5]になるのでしょうか?またget[4,6,4,2]もしかり。
0987デフォルトの名無しさん2013/03/23(土) 11:04:15.91
get :: [Int] -> [Int]
get list = case (list) of
[] -> []
(x:xs) ->
if x > 3 then x : get xs
else get xs
ようやく直せました。x | x<- xsではxが判定に入っていなかったからでした。色々ありがとうございました。
0988デフォルトの名無しさん2013/03/23(土) 11:06:56.43
[4, 4, 5]を(x: xs)でパターンマッチするとxに先頭要素4、xsに残りの要素[4, 5]が束縛される
あとcase式は使わずにトップダウンで定義を書き下したほうがいいと思うよ
0989デフォルトの名無しさん2013/03/23(土) 11:07:29.69
?トップダウン
○トップレベル
0990デフォルトの名無しさん2013/03/23(土) 11:10:58.21
>>987
( x : xs ) -> [x | x <- (x : xs), x > 3]

こう直すだけでいい筈です。
0991デフォルトの名無しさん2013/03/23(土) 11:12:42.38
>>987
>>988 の言うように 983 にある get の最後の行
(x:xs) -> [x | x <- xs, x > 3]
がおかしかった。
この書き方したいなら、
(y:ys) -> [x | x <- (y:ys), x > 3]
とかとするか、
y@(x:xs) -> [x | x <- y, x > 3 ]
とかかな。
0992デフォルトの名無しさん2013/03/23(土) 11:19:25.79
get xs=[x|x<-xs,x>3]
0993デフォルトの名無しさん2013/03/23(土) 11:37:03.05
内包表記とcaseを同時に使う必要はないね
使わないと機会損失だから同時に使うみたいなパターンは危ない
0994デフォルトの名無しさん2013/03/23(土) 11:43:18.84
なんでコンスにしてんの?
0995デフォルトの名無しさん2013/03/23(土) 11:54:25.38
トップレベルを調べてみます。
内包=if elseのことでしょうか?
(x:xs) ->
| x > 3 = x : get xs
| otherwise = get xs
だとエラーが出てしまったのでif使ってしまいました。まだよく分かっていないのですが、caseならcase, | なら |で統一した方がいいのでしょうか?ま〜名前がcouなのは適当に打ったからです。
0996デフォルトの名無しさん2013/03/23(土) 12:22:00.99
次スレ立てられなかった。誰か頼む:スレタイ <- 関数型プログラミング言語Haskell Part22
1はこんな感じで: 
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/
0997デフォルトの名無しさん2013/03/23(土) 12:31:21.96
>>995
こういうプログラムを書きたかったんじゃないのかな。
get :: [Int] -> [Int]
get list = case (list) of
 [] -> []
 (1 : xs) -> [x | x <- xs,x > 1]
 (2 : xs) -> [x | x <- xs,x > 2]
 (x : xs) -> [x | x <- (x : xs), x > 3]

cou :: [Int] -> Int
cou (list) = case (get list) of
 [] -> 0
 (x:xs) -> case (x ==4) of
  True -> 1 + cou xs
  _-> cou xs
0998デフォルトの名無しさん2013/03/23(土) 12:38:35.91
次スレゆうどう
http://toro.2ch.net/test/read.cgi/tech/1364009659/
0999デフォルトの名無しさん2013/03/23(土) 14:00:30.97
よし、埋めはまかせろ!
1000デフォルトの名無しさん2013/03/23(土) 14:01:24.94
バリバリバリ
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。