[過去ログ] 関数型プログラミング言語Haskell Part32 (1002レス)
上下前次1-新
抽出解除 レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
9(11): 2019/02/03(日)12:58 ID:5bolWXfM(1/36) AAS
haskell紹介してるブログとか色々あるけどどこも肝心要のところがすっぽり抜けててイライラするな・・
例えば
fact 0 = 1
fact n = n * fact(n - 1)
これ無限ループになっちゃって終わらないでしょ終端条件も書いてないし。
fact 3を展開すると
3 * ( 2 * ( 1 * ( 1 * ………
0を入力すれば1になるってことはこの先ずーっと1が繰り返されるだけだし。
同じ値が2度続いたら処理を止めるとか変な仕組みでも入ってるのかねー
11(3): ◆QZaw55cn4c 2019/02/03(日)15:04 ID:t4xt++Qj(1/20) AAS
>>9
>無限ループになっちゃって終わらないでしょ終端条件も書いてないし。
いえいえ、終端条件が
>fact 0 = 1
です、n ∈ N たる n からはじまって 0 で終わる、と読みます
fact 3 = 3 * fact 2
= 3 * 2 * fact 1
= 3 * 2 * 1 * fact 0
= 3 * 2 * 1 * 1
で止まります.
13(3): 2019/02/03(日)20:51 ID:5bolWXfM(2/36) AAS
>>12
それじゃ納得できないんだけども
終わるから大丈夫仕様ですってもやっとするから
>>9で書いたように1が無限に続いちゃうと思うんだけどな
0が入力されたら1を返すってことだから
1 - 1でまた繰り返しちゃうよね
そもそもどの値が来たら終わるか全く記述がないよね
そういうところも納得できないっていうかおかしい
15(3): 2019/02/03(日)21:13 ID:5bolWXfM(3/36) AAS
>>14
あの説明で納得するようならここ来てないから
あれだとブログの説明と何も変わらない
まさか1かtrueを返したら問答無用で終わる仕様だったりするのかねー
23(4): 2019/02/03(日)21:25 ID:5bolWXfM(5/36) AAS
>>19
理解したのは>>9の通りで
仮定として1かtrueを返したら再帰は止まる仕様になってると推測してる
>>20
だからfact(1)で無限に続いちゃうよね
1 - 1で fact 0をevalしてまたfact(1)になる
そこで終了条件が必要だけど何にも書いてないから記述通りならずーっと続く
としか見えないんだよね
25(3): 2019/02/03(日)21:27 ID:5bolWXfM(6/36) AAS
>>22
ということはやっぱり1を返したら必ず再帰は止まる仕様であってるのかな?
だったらすっきりするんだけども
33(4): 2019/02/03(日)21:33 ID:5bolWXfM(7/36) AAS
>>28
いやいやfact(1)の評価は0なんだし
fact 0の定義があるからまた1
どう考えても続くんだよね
そもそも再起から脱出するためのコードがどこにもないから怪しいとも踏んでる
何か前提となってる仕様がありそうだ
42(4): 2019/02/03(日)21:39 ID:5bolWXfM(9/36) AAS
>>35
教えてもらったからもう大丈夫だよ
1で再起が止まる仕様なら納得だし
>>36
fact(1)を入力したら 1-1を評価するから fact 0
特に問題ないよ
1で止まる仕様らしいからそれを前提にコード考えないといかんのか・・
ややこしいことになるねこれ
57(3): 2019/02/03(日)21:53 ID:RwDwNYzW(11/27) AAS
もしかすると、だけど
fact 0 = 1
を実行した直後に
fact 1 = 1 * fact 0
が続くと考えている?
もうしそうだとしたらそこが間違いで
fact 0 = 1
fact n = n * fact(n - 1)
はそのどちらかしか実行されない
60(4): 2019/02/03(日)21:57 ID:5bolWXfM(14/36) AAS
>>56
ごめん意味不明わからん
>>57
もちろんそのように考えてる
fact 0 = 1の結果はすぐ反映されるんじゃないの?
92(5): 2019/02/03(日)22:37 ID:5bolWXfM(25/36) AAS
>>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は続くよ
だから色々納得いかないことあるんだけど
95(3): 2019/02/03(日)22:41 ID:5bolWXfM(26/36) AAS
>>94
それで地道にやったら >>9になったよ
あれ以外どうしろと・・
112(3): 2019/02/03(日)22:56 ID:o+jOfHnE(2/3) AAS
Cでこんな感じに書いてあげれば分かるのだろうか。
int fact(int n) {
switch(n) {
case 0: return 1; // fib 0 = 1
default: return n * fact(n-1); // fib n = n * fact (n-1)
}
}
118(3): 2019/02/03(日)23:01 ID:5bolWXfM(34/36) AAS
>>112
なっ
まさかそういう意味なの?
fact 0 = 1
fact n = n * fact(n - 1)
のどちらかしか評価されないとか見ただけじゃわからないって!!
あーそういうことかー
381(3): 2019/06/07(金)00:15 ID:pdU7zkZH(1) AAS
すみません、
凄いH書籍で学習していて疑問に思ったのですが
型クラス中級で、真理値の様な物を持ちうる型、
JavaScriptのfalsyな値を持つ型を作る実習で
Intや[ ]を独自のYesNo型のインスタンスにする
例があったのですが
標準で存在する型に後から
独自の型のインスタンスにする事に違和感を感じ
バグの温床になるのではという懸念の印象がありました。
オブジェクト嗜好のサブクラスみたいに
省4
510(5): 2019/10/08(火)21:32 ID:nLwShu/0(1/3) AAS
何冊か本を読んだけど、Haskell の気持ちがなかなか分からん…
624(3): 2019/10/24(木)09:09 ID:M5uvwdA8(1/2) AAS
>>618
浮動小数においては
(a+b)+c != a+(b+c)
なんだよ。
661(3): 2019/11/02(土)22:57 ID:r3wI6psG(1) AAS
Haskellを勉強するとどんなメリットが有りますか?
? Haskellを使って仕事する開発プロジェクトなんてものは世の中に有るのですか?
? ?が無いなら開発プロジェクトが無くても仕事の効率化などで、役立てる方法は有るのですか?
? ?も無いなら、勉強して得た知識を日々のJava等の開発プロジェクトで役立てる方法は有るのですか?
745(4): 2019/11/07(木)18:28 ID:THHm8pjB(1/2) AAS
>>729
横からですけど、ホモロジー代数の有用性を教えてくれませんか?
何に使えるんです?
876(3): 2019/12/23(月)17:59 ID:/flai8cL(1/5) AAS
もしかしてParsecってあんまり使われてない?
Parsecのドキュメントが2001年とか古いのしか無くて、最初のサンプルコードすら通らない
ライブラリの使い方が解らなくていきなり躓いてる
970(4): 2020/02/05(水)18:14 ID:fFjiekZv(1) AAS
>>966
> ここでよく題材として挙がるのは圏論だけど これは俺も必要性はあんま感じない
プログラムを書く立場ならば圏論なんて知る必要は全くないよ
そもそも仮に圏論を知らないと良いプログラムが書けないプログラミング言語があったとしたら
そんなプログラミング言語は使い物にならない
Haskellerなど一部のプログラマの間での昨今の圏論ブームは少なくとも私には単なる一種のファッションの流行にしか見えないし余り意義を認めない
他人の趣味にケチをつける気はないので、やりたければどうぞ御自由に、としか言いようがない
圏論を知る必要があるとすればプログラムを書く人間ではなくて新しいプログラミング言語の設計をする人間(の一部)だ
省8
977(3): 2020/02/06(木)01:01 ID:OGs/tKtL(1/4) AAS
>>970
大規模ソフトウェアのメンテにおいて、
圏論を知らないとこのように失敗するが、
知っているとこのように成功する、
という具体例を挙げられますか?
または、具体例を挙げて説明している本やブログ、
カンファレンスなどを紹介できますか?
上下前次1-新書関写板覧索設栞歴
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル
ぬこの手 ぬこTOP 0.052s