[過去ログ]
関数型プログラミング言語Haskell Part32 (1002レス)
関数型プログラミング言語Haskell Part32 http://mevius.5ch.net/test/read.cgi/tech/1548720347/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
必死チェッカー(本家)
(べ)
自ID
レス栞
あぼーん
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
9: デフォルトの名無しさん [sage] 2019/02/03(日) 12:58:27.43 ID:5bolWXfM haskell紹介してるブログとか色々あるけどどこも肝心要のところがすっぽり抜けててイライラするな・・ 例えば fact 0 = 1 fact n = n * fact(n - 1) これ無限ループになっちゃって終わらないでしょ終端条件も書いてないし。 fact 3を展開すると 3 * ( 2 * ( 1 * ( 1 * ……… 0を入力すれば1になるってことはこの先ずーっと1が繰り返されるだけだし。 同じ値が2度続いたら処理を止めるとか変な仕組みでも入ってるのかねー http://mevius.5ch.net/test/read.cgi/tech/1548720347/9
13: デフォルトの名無しさん [sage] 2019/02/03(日) 20:51:10.38 ID:5bolWXfM >>12 それじゃ納得できないんだけども 終わるから大丈夫仕様ですってもやっとするから >>9で書いたように1が無限に続いちゃうと思うんだけどな 0が入力されたら1を返すってことだから 1 - 1でまた繰り返しちゃうよね そもそもどの値が来たら終わるか全く記述がないよね そういうところも納得できないっていうかおかしい http://mevius.5ch.net/test/read.cgi/tech/1548720347/13
15: デフォルトの名無しさん [sage] 2019/02/03(日) 21:13:08.06 ID:5bolWXfM >>14 あの説明で納得するようならここ来てないから あれだとブログの説明と何も変わらない まさか1かtrueを返したら問答無用で終わる仕様だったりするのかねー http://mevius.5ch.net/test/read.cgi/tech/1548720347/15
18: デフォルトの名無しさん [sage] 2019/02/03(日) 21:19:06.57 ID:5bolWXfM >>16 それじゃ終わらない 終了条件が書いていないから なんどもいうように * 1がずーっと続くようにしか見えない だからこの例題見たときにイライラしてたんだよね 前提となってる仕様があるけど説明省いたとかそれ系かなと http://mevius.5ch.net/test/read.cgi/tech/1548720347/18
23: デフォルトの名無しさん [sage] 2019/02/03(日) 21:25:18.35 ID:5bolWXfM >>19 理解したのは>>9の通りで 仮定として1かtrueを返したら再帰は止まる仕様になってると推測してる >>20 だからfact(1)で無限に続いちゃうよね 1 - 1で fact 0をevalしてまたfact(1)になる そこで終了条件が必要だけど何にも書いてないから記述通りならずーっと続く としか見えないんだよね http://mevius.5ch.net/test/read.cgi/tech/1548720347/23
25: デフォルトの名無しさん [sage] 2019/02/03(日) 21:27:00.44 ID:5bolWXfM >>22 ということはやっぱり1を返したら必ず再帰は止まる仕様であってるのかな? だったらすっきりするんだけども http://mevius.5ch.net/test/read.cgi/tech/1548720347/25
33: デフォルトの名無しさん [sage] 2019/02/03(日) 21:33:05.02 ID:5bolWXfM >>28 いやいやfact(1)の評価は0なんだし fact 0の定義があるからまた1 どう考えても続くんだよね そもそも再起から脱出するためのコードがどこにもないから怪しいとも踏んでる 何か前提となってる仕様がありそうだ http://mevius.5ch.net/test/read.cgi/tech/1548720347/33
34: デフォルトの名無しさん [sage] 2019/02/03(日) 21:34:47.28 ID:5bolWXfM >>29 やっぱりそうなんだ そういう重要なことは早めに説明書きしといてくれないと大混乱だわ まースッキリしたありがと そういう仕様なら色々めんどくさいな・・・ http://mevius.5ch.net/test/read.cgi/tech/1548720347/34
42: デフォルトの名無しさん [sage] 2019/02/03(日) 21:39:35.29 ID:5bolWXfM >>35 教えてもらったからもう大丈夫だよ 1で再起が止まる仕様なら納得だし >>36 fact(1)を入力したら 1-1を評価するから fact 0 特に問題ないよ 1で止まる仕様らしいからそれを前提にコード考えないといかんのか・・ ややこしいことになるねこれ http://mevius.5ch.net/test/read.cgi/tech/1548720347/42
44: デフォルトの名無しさん [sage] 2019/02/03(日) 21:41:42.22 ID:5bolWXfM >>39 どーゆーこと もうそれで覚えちゃったんだけども・・ http://mevius.5ch.net/test/read.cgi/tech/1548720347/44
50: デフォルトの名無しさん [sage] 2019/02/03(日) 21:46:48.03 ID:5bolWXfM >>45 それだと>>9の通りで揺らがない >>46 この記述だと無限に *1が続くわけだから なにか終了条件が必要なわけで 1を返したら再帰が止まる仕様ならなるほど納得 http://mevius.5ch.net/test/read.cgi/tech/1548720347/50
53: デフォルトの名無しさん [sage] 2019/02/03(日) 21:49:54.21 ID:5bolWXfM >>48 大混乱してきた 1で再帰は必ず止まるんでないならさらにわからなくなるんだけども http://mevius.5ch.net/test/read.cgi/tech/1548720347/53
55: デフォルトの名無しさん [sage] 2019/02/03(日) 21:51:42.20 ID:5bolWXfM >>51 fact(1)はfact(n-1)によってfact(0)になるよね 実は式自体が予想外の評価するってことなのかな? いやまさかね・・ http://mevius.5ch.net/test/read.cgi/tech/1548720347/55
60: デフォルトの名無しさん [sage] 2019/02/03(日) 21:57:58.25 ID:5bolWXfM >>56 ごめん意味不明わからん >>57 もちろんそのように考えてる fact 0 = 1の結果はすぐ反映されるんじゃないの? http://mevius.5ch.net/test/read.cgi/tech/1548720347/60
64: デフォルトの名無しさん [sage] 2019/02/03(日) 22:02:19.10 ID:5bolWXfM >>63 いやいや終了条件が何も書かれてないから結局は続くよ どのみちfact 0が1となるならまたfact(1-1)でfact(0)でしょ 間違ってないはずなんだけど何か使ってる人には常識的なお約束事とかあるのかな http://mevius.5ch.net/test/read.cgi/tech/1548720347/64
66: デフォルトの名無しさん [sage] 2019/02/03(日) 22:06:24.90 ID:5bolWXfM >>65 いやただのカウンターだったとしても止まらないし やっぱりおかしいとは思う 何か前提がありそうな気はする http://mevius.5ch.net/test/read.cgi/tech/1548720347/66
70: デフォルトの名無しさん [sage] 2019/02/03(日) 22:10:11.03 ID:5bolWXfM >>67 = 3 * 2 * 1 * 1 = 3 * 2 * 1 * 1 * fact( 1 - 1 ) = 3 * 2 * 1 * 1 * 1 * fact ( 1 - 1) どこまでも続くじゃない・・ http://mevius.5ch.net/test/read.cgi/tech/1548720347/70
73: デフォルトの名無しさん [sage] 2019/02/03(日) 22:14:19.16 ID:5bolWXfM >>69 fact 0 = 1で終了するというのが納得いってない もしそうであれば1を返せば再帰は終了すると仮定したんだ そもそもfact 0 = 1ってマクロ定義みたいなもんだし 直ちに評価されて式に代入されるよね http://mevius.5ch.net/test/read.cgi/tech/1548720347/73
75: デフォルトの名無しさん [sage] 2019/02/03(日) 22:18:13.63 ID:5bolWXfM >>72 プログラミング言語は数学じゃないから 再帰から脱出するならそのためのコードは絶対必要なはずなんだ それがないってことは仕掛けがあるはずで その仮定が1を返せば再帰から脱出できるという考え でも違うらしいから大混乱してる http://mevius.5ch.net/test/read.cgi/tech/1548720347/75
77: デフォルトの名無しさん [sage] 2019/02/03(日) 22:21:37.72 ID:5bolWXfM >>74 Cで再帰させるなら終了条件にヒットしたらフラグたててreturnで戻ってく 関数定義の仕方ならサッと見たけど特に疑問はなかったよ パターンマッチっていってもマクロ定義みたいなもんだし特にどうということも http://mevius.5ch.net/test/read.cgi/tech/1548720347/77
79: デフォルトの名無しさん [sage] 2019/02/03(日) 22:24:44.77 ID:5bolWXfM >>76 いやだから・・ fact 0は1なんだからその次はfact(1)になるでしょ 何も間違ってないと思うんだけど。 http://mevius.5ch.net/test/read.cgi/tech/1548720347/79
81: デフォルトの名無しさん [sage] 2019/02/03(日) 22:26:23.52 ID:5bolWXfM >>78 それは終了条件じゃないよね 何が正解なのかさらに混乱して来た http://mevius.5ch.net/test/read.cgi/tech/1548720347/81
86: デフォルトの名無しさん [sage] 2019/02/03(日) 22:30:37.00 ID:5bolWXfM >>83 だから・・ fact 0は1なんだから続くじゃない? 延々と再帰するようにしか見えない http://mevius.5ch.net/test/read.cgi/tech/1548720347/86
88: デフォルトの名無しさん [sage] 2019/02/03(日) 22:32:38.86 ID:5bolWXfM >>85 PythonやJavaは知らないのでなんとも http://mevius.5ch.net/test/read.cgi/tech/1548720347/88
92: デフォルトの名無しさん [sage] 2019/02/03(日) 22:37:00.44 ID:5bolWXfM >>90 だから =3 * 2 * 1 * 1 * fact(1-1) =3 * 2 * 1 * 1 * 1*fact(1-1) =3 * 2 * 1 * 1 * 1*1*fact(1-1) という具合にいつまでもfactは続くよ だから色々納得いかないことあるんだけど http://mevius.5ch.net/test/read.cgi/tech/1548720347/92
95: デフォルトの名無しさん [sage] 2019/02/03(日) 22:41:48.43 ID:5bolWXfM >>94 それで地道にやったら >>9になったよ あれ以外どうしろと・・ http://mevius.5ch.net/test/read.cgi/tech/1548720347/95
98: デフォルトの名無しさん [sage] 2019/02/03(日) 22:43:47.92 ID:5bolWXfM >>96 そこはどうでもいいところだから書かなかった http://mevius.5ch.net/test/read.cgi/tech/1548720347/98
101: デフォルトの名無しさん [sage] 2019/02/03(日) 22:45:27.31 ID:5bolWXfM >>97 あれでいいんだけど似たような制御構造がないよね haskellのコードは全く別物に見える http://mevius.5ch.net/test/read.cgi/tech/1548720347/101
103: デフォルトの名無しさん [sage] 2019/02/03(日) 22:49:36.42 ID:5bolWXfM >>99 =3 * 2 * 1 * 1 =3 * 2 * 1 * 1 * 1 =3 * 2 * 1 * 1 * 1 * 1 ・・・ やっぱり変わんないよ? 何かやってる人には常識だからあえて書いていないとかのお約束ごととかある言語なんじゃないかなぁ・・ パッと見た感じそんなに難しい言語には見えないけど内容に納得できない http://mevius.5ch.net/test/read.cgi/tech/1548720347/103
106: デフォルトの名無しさん [sage] 2019/02/03(日) 22:51:48.54 ID:5bolWXfM >>102 普通にやったけど特に問題なかったよ http://mevius.5ch.net/test/read.cgi/tech/1548720347/106
108: デフォルトの名無しさん [sage] 2019/02/03(日) 22:54:17.35 ID:5bolWXfM >>104 fact 0 = 1とか定義されちゃってるから変形もなにもあの形にしかならんでしょう >>105 fact 0の結果が1だからそれはすぐ反映されるので http://mevius.5ch.net/test/read.cgi/tech/1548720347/108
111: デフォルトの名無しさん [sage] 2019/02/03(日) 22:56:02.92 ID:5bolWXfM >>107 不正確と言われても他に言いようがないし http://mevius.5ch.net/test/read.cgi/tech/1548720347/111
114: デフォルトの名無しさん [sage] 2019/02/03(日) 22:58:05.17 ID:5bolWXfM >>110 直前の結果が1なのでfact(n-1)に与えられてfact(1-1) 特に問題ないはずだけどもこれだけなら http://mevius.5ch.net/test/read.cgi/tech/1548720347/114
118: デフォルトの名無しさん [sage] 2019/02/03(日) 23:01:37.23 ID:5bolWXfM >>112 なっ まさかそういう意味なの? fact 0 = 1 fact n = n * fact(n - 1) のどちらかしか評価されないとか見ただけじゃわからないって!! あーそういうことかー http://mevius.5ch.net/test/read.cgi/tech/1548720347/118
121: デフォルトの名無しさん [sage] 2019/02/03(日) 23:03:24.76 ID:5bolWXfM これは説明書きに書いておいて欲しかったなー これじゃわかりようがないわ http://mevius.5ch.net/test/read.cgi/tech/1548720347/121
125: デフォルトの名無しさん [sage] 2019/02/03(日) 23:04:27.74 ID:5bolWXfM 完全解決してスッキリ みんな時間とらせてしまってごめん そしてありがとう http://mevius.5ch.net/test/read.cgi/tech/1548720347/125
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.037s