[表示 : 全て 最新50 1-99 2chのread.cgiへ]
Update time : 02/10 00:06 / Filesize : 25 KB / Number-of Response : 88
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん mailto:sage [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/

52 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 22:23:54.11 ]
>>50はものすごく教科書的でいいね。

nthElementIs xs num = last . take num $ xs

俺ならこの質問されたらめんどくさいから一行でこう書くわ
駄目な大人になってしまった

53 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 22:37:16.96 ]
nthElementIs xs n = xs!!(n-1)

54 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 22:41:13.31 ]
>>53でFA
これ以外の正解はない

55 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 22:46:36.68 ]
明らかに学習目的なのに既存の関数を使って正解って…

あとインデックスは0から開始するように習慣づけるべきだと誰も指摘しないことに驚いた

56 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 22:52:17.68 ]
>>46
分離したというけど、無関係ではないよね
IOの中では関数を適用できるが、関数の中ではIOを実行できない、という関係
コールバック関数を自分でコールできないみたいな状況に似ている

57 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 22:56:07.24 ]
既存の関数使わないでどう答えろと
(==)も(<)も(>)も(!!)も、全部既存の関数だぞ

58 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 23:20:28.47 ]
monadだから分離されているというべきなのか。
IOの型修飾を外すには、(>>=)するしか無いから分離されているというか、、、

59 名前:50 mailto:sage [2013/02/06(水) 23:51:46.77 ]
>>51
> エラー書くよりはMaybe使った方がやはりいいのでしょうか?
> 後、ガードとcaseの使い分けはあるのでしょうか?

すまん。自分も習いはじめでよくわからんとです。

>>52
教科書読んだばかりですから !!
一流のHaskellerになると関数合成ばしばし使うのですね。
自分、関数合成にまだ発想が行きません。

便乗質問ですが、ピリオドとダラーの使い分けなんですけど、
nthElementIs xs num = last . take num $ xs

nthElementIs xs num = last $ take num $ xs

nthElementIs xs num = last $ take num xs
も結果は同じなのですがどう使い分けてます ?

本来なら(引数の順番さ000え逆だったら、nthElementIs num xsだったら)
nthElementIs num = last . take num
って書きたかったのでしょうけど


>>55
> あとインデックスは0から開始するように習慣づけるべきだと誰も指摘しないことに驚いた

そうしなければいけない何らかの事情があるのかと思ってた
((!!)を使うといけないのもエラー処理のためとか今後の拡張とかの理由かと思ってた)

60 名前:デフォルトの名無しさん mailto:sage [2013/02/06(水) 23:55:00.06 ]
>>57
「既存の(ほぼ答えそのものの)関数を使って…」って書いたら満足だったか?

ていうか、よく見たら思った以上に酷い回答ばっかだった

まず、「is」が付く名前は慣習的にBoolを返すものだから、「nthElement」か単に「nth」とすべき。

>>52はありえない
>>50
(nthElement [] n) がNothingを返すのはいいが、
(nthElement [1,2,3,4] -1) などは明らかにプログラミングエラーなのだからエラーにするべき。
(他の言語なら最後の要素を返すのも考えられるが)
そうしないと潜在的なバグがコードに紛れ込み、かえって品質を落とすことになる。

入門書の最初の方に出てくるような例なんだから、これくらいまともに回答してくれよ



61 名前:デフォルトの名無しさん mailto:sage [2013/02/07(木) 00:37:35.34 ]
人に文句言ってばかりで自分では何もしないカスがいるみたいだから、
俺が代わりにPreludeに載ってる!!の例から丸写ししてやる。

nthElement :: [a] -> Int -> a
nthElement xs n | n < 1 = error "nthElement: negative index"
nthElement [] _ = error "nthElement: index too large"
nthElement (x:_) 1 = x
nthElement (_:xs) n = nthElement xs (n - 1)

62 名前:デフォルトの名無しさん mailto:sage [2013/02/07(木) 00:52:21.07 ]
丸写しして気づいたけど、2chでの回答としては>>53が一番の正解で間違いないね
ほぼ答えそのものの関数があるならそれを示せばいいだけだ。わざわざ転記する必要ねーじゃん

63 名前:デフォルトの名無しさん mailto:sage [2013/02/07(木) 01:08:02.48 ]
>>61
酷いと言われて悔しかったのはわかるが、実際にいちばんまともなコメントをしているのは自分だと思うぞ。
名前から「Is」を削ったのは納得したからじゃないの?
(インデックスをわざわざ1から開始にするのは意味がわからないが…)

>>62
それなら答えは(!!)を使えということだろ。
あるいはソースへのリンクを貼るか
www.haskell.org/ghc/docs/latest/html/libraries/base-4.6.0.1/src/GHC-List.html#%21%21

64 名前:デフォルトの名無しさん mailto:sage [2013/02/07(木) 01:17:45.78 ]
病院池

65 名前:デフォルトの名無しさん mailto:sage [2013/02/07(木) 01:27:36.33 ]
>実際にいちばんまともなコメントをしているのは自分だと思う
実際に一番まともなコメントは>>63以外にないと思うぞ。マジで。
名前は突っ込まれたから変えたけど正直問題の本質と関係ないからどうでもいいし

>インデックスをわざわざ1から開始にするのは意味がわからない
問題読み直したら?

>それなら答えは(!!)を使えということだろ。
だからそれが>>63で既出だって話。ぐだぐだ書いてる俺らより余程簡潔にまとめてるし、
ソースのリンクなんか貼らなくてもPreludeのソースなんてド素人でも見つけられる。

66 名前:デフォルトの名無しさん mailto:sage [2013/02/07(木) 01:28:48.39 ]
安価ミス。>>63じゃなくて>>53

×実際に一番まともなコメントは>>63以外にないと思うぞ。
○実際に一番まともなコメントは>>53以外にないと思うぞ。

×だからそれが>>63で既出だって話。ぐだぐだ書いてる俺らより余程簡潔にまとめてるし、
○だからそれが>>53で既出だって話。ぐだぐだ書いてる俺らより余程簡潔にまとめてるし、

67 名前:デフォルトの名無しさん mailto:sage [2013/02/07(木) 01:31:57.55 ]
>>62
あなたがそれを一番の正解と判断するに至った価値基準は?
それはあなた以外の人も持っていて当然のもの?
それ以外の価値基準が存在しうることは理解してる?

68 名前:デフォルトの名無しさん mailto:sage [2013/02/07(木) 06:04:09.76 ]
なんかここ怖い

69 名前:デフォルトの名無しさん mailto:sage [2013/02/07(木) 07:11:57.30 ]
基地外隔離スレだから仕方ない

70 名前:デフォルトの名無しさん mailto:sage [2013/02/07(木) 07:26:24.38 ]
>>65,66
なんでそんなに切れてるわけ?
>>47を見れば初学者なのは一目瞭然なんだから、インデックスは0から始めるものだと教えてやるのは当然だし、
どう考えても争うような本質的な問題じゃないだろ?

> ソースのリンクなんか貼らなくてもPreludeのソースなんてド素人でも見つけられる。
リンクを貼るの難しそうだしね。無理言って悪かったよ。



71 名前:デフォルトの名無しさん mailto:sage [2013/02/07(木) 07:26:39.08 ]
Haskell怖いです(震え声)

72 名前:デフォルトの名無しさん mailto:sage [2013/02/07(木) 07:30:47.90 ]
Haskellは怖くないよ
>>47とかたぶんFizzBuzz並に簡単な問題
それさえもできない人が何故か回答してるからおかしくなってるだけで

73 名前:デフォルトの名無しさん mailto:sage [2013/02/07(木) 07:55:12.22 ]
nth elementの取り出しなんて、preludeのソース詠めばいいだろ

74 名前:デフォルトの名無しさん mailto:sage [2013/02/07(木) 08:30:01.16 ]
どうみても頭がおかしいのは>>60ひとり

75 名前:デフォルトの名無しさん mailto:sage [2013/02/07(木) 10:25:36.22 ]
入門書読んだ後は、!!とか自作して遊んでたな。。。(遠い目)

76 名前:デフォルトの名無しさん mailto:sage [2013/02/07(木) 18:35:12.00 ]
プログラミングhaskell
8章まで来たけど、いよいよ全く意味がわからなくなって挫折しそうボスケテ!

77 名前:デフォルトの名無しさん mailto:sage [2013/02/07(木) 19:13:34.93 ]
8章は載ってるコードじゃ動かないし、その後の章の知識が必要だから初見で理解するのはたぶん無理だろう
理解できると一番面白い章だけど、最初は適当に読み流した方がいい

78 名前:デフォルトの名無しさん mailto:sage [2013/02/07(木) 20:39:42.42 ]
8章から難易度がスコーンと上がるからな
すごいHの方に浮気するのもアリだと思う

79 名前:デフォルトの名無しさん mailto:sage [2013/02/07(木) 21:16:21.92 ]
個人的にはすごいHaskellの方が難しいと思う
とくに序盤は

80 名前:デフォルトの名無しさん mailto:sage [2013/02/08(金) 01:55:53.33 ]
RWHで挫折してまたRWHに戻ってくるまでが勉強です



81 名前:デフォルトの名無しさん [2013/02/08(金) 13:22:59.19 ]
dammy

82 名前:デフォルトの名無しさん mailto:sage [2013/02/09(土) 12:25:40.88 ]
>>77
8章はPreludeのdo,returnとかが邪魔してコード通り動かないよなw
とりあえずdo表記を使わず、Preludeにある関数は名前を変えて
なんとか練習問題まで終わらせたけど・・・。

9章の電卓も期待した動きと違う。主に遅延評価のせいだと思うけど。
入力した式が評価されるまでputStrの実行も遅延させられるみたいで、
電卓のテンキー(飾り)が表示されない・・・。

俺は練習問題に関してはここで心が折れたw

本文は、10章まで読んだけど、11章からは応用問題みたいだから
後でいいやと読むのを止めたw

83 名前:デフォルトの名無しさん mailto:sage [2013/02/09(土) 18:22:47.83 ]
Haskellの最初の挫折ポイントはモナド
次の挫折ポイントが値の直接変更はSTモナド内で引きこもってやるということ

次の挫折ポイントがモナド変換

84 名前:デフォルトの名無しさん mailto:sage [2013/02/09(土) 19:15:19.99 ]
モナドって、"最初の"挫折ポイントか?
私は、まだモナド山に入山してさえいない。その前でちょっと挫折気味。

今、プログラミングHaskell 13章を読んでいる最中。

すごいHaskellはアダプティブファンクターのところで止まっている。

プログラミングHaskell を読み終わったら、すごいHaskellのアダプティブファンクター
〜モナドのところに進んでみる。

85 名前:デフォルトの名無しさん mailto:sage [2013/02/09(土) 19:19:40.65 ]
adaptive functor!

86 名前:デフォルトの名無しさん mailto:sage [2013/02/09(土) 20:58:26.45 ]
>アダプティブファンクター
挫折した感がものすごく良く伝わってくる

87 名前:デフォルトの名無しさん mailto:sage [2013/02/09(土) 21:32:25.92 ]
挫折ポイントはいっぱいある。
型クラス、型構築子、データ構築子などの独特な型の世界が
行く手を阻んでいる。
ついでに型でエラーが出まくって慣れないと
何のエラーかよくわからんのがなぁ。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧](*・∀・)<25KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef