関数型プログラミング言語 Haskell について語るスレです。
haskell.org (公式サイト)
https://www.haskell.org/
日本Haskellユーザーグループ
https://haskell.jp/
前スレ
関数型プログラミング言語Haskell Part31
https://mevius.5ch.net/test/read.cgi/tech/1506447188/
探検
関数型プログラミング言語Haskell Part32
■ このスレッドは過去ログ倉庫に格納されています
2019/01/29(火) 09:05:47.90ID:gJP/u7IJ
>>33
>いやいやfact(1)の評価は0なんだし
ここが違っています。
fact(1) の評価は 1 * fact(0) であって、 0 じゃないです
fact(0) の値が具体的になにかは、fact(0) を意識しはじめた時点では分からないのですよ
>いやいやfact(1)の評価は0なんだし
ここが違っています。
fact(1) の評価は 1 * fact(0) であって、 0 じゃないです
fact(0) の値が具体的になにかは、fact(0) を意識しはじめた時点では分からないのですよ
2019/02/03(日) 21:37:12.79ID:PKgH5/Eo
バカ過ぎて泣けてくる…
2019/02/03(日) 21:37:24.99ID:DVkCUlxV
>>33
おもろいな だんだんネタに思えてきた
fact nの定義をよく見ろ
fact 0 = 1 で再帰していないじゃん ここで止まるだろ 普通に考えれば
他の言語も一緒だろ ただそれをパターンマッチでやってるだけ
おもろいな だんだんネタに思えてきた
fact nの定義をよく見ろ
fact 0 = 1 で再帰していないじゃん ここで止まるだろ 普通に考えれば
他の言語も一緒だろ ただそれをパターンマッチでやってるだけ
2019/02/03(日) 21:37:39.39ID:RwDwNYzW
40デフォルトの名無しさん
2019/02/03(日) 21:38:05.69ID:I0qputsI2019/02/03(日) 21:39:25.68ID:RwDwNYzW
2019/02/03(日) 21:39:35.29ID:5bolWXfM
2019/02/03(日) 21:41:09.23ID:RwDwNYzW
2019/02/03(日) 21:41:42.22ID:5bolWXfM
2019/02/03(日) 21:43:10.37ID:RwDwNYzW
>>42
>1で再起が止まる仕様なら納得だし
理解が不十分じゃないかと危惧します、その台詞「1 で再起がとまる」という言葉ですが、「何が」 1 で再起が止まる、と考えているのですか?
あなたの発言は、いちいち「何が」「どうだ」の「何が」が欠けているので不安です
>1で再起が止まる仕様なら納得だし
理解が不十分じゃないかと危惧します、その台詞「1 で再起がとまる」という言葉ですが、「何が」 1 で再起が止まる、と考えているのですか?
あなたの発言は、いちいち「何が」「どうだ」の「何が」が欠けているので不安です
>>44
覚える、という言葉はこういうときに使うものではないと思いますよ
覚える、という言葉はこういうときに使うものではないと思いますよ
2019/02/03(日) 21:44:56.66ID:RwDwNYzW
2019/02/03(日) 21:46:13.57ID:PKgH5/Eo
釣り宣言マダー?
2019/02/03(日) 21:46:48.03ID:5bolWXfM
2019/02/03(日) 21:49:35.33ID:DdA3Wm74
2019/02/03(日) 21:49:54.21ID:5bolWXfM
2019/02/03(日) 21:49:57.06ID:DVkCUlxV
2019/02/03(日) 21:51:42.20ID:5bolWXfM
>>50
>この記述だと無限に *1が続くわけだから
あなたの理解になにが足りないのかがわかるような気がしてきました。
「fact の引数が 1 である」と「fact の求値が 1 である」とを区別していないようですね
この二つは厳然として異なります
fact 0 = 1
は、fact(0) の「求値が」1 である、といっているのです
fact n = n * fact (n - 1)
は、たとえば
fact 8 = 8 * fact 7
fact 7 = 7 * fact 6
fact 6 = 6 * fact 5
fact 5 = 5 * fact 4
fact 4 = 4 * fact 3
fact 3 = 3 * fact 2
fact 2 = 2 * fact 1
という記述を纏めて表現しているのであり、これは fact n の「求値」は fact (n - 1) という、もともとの引数 n とは違う n - 1 という引数を使った fact の求値で定義しているのです
>この記述だと無限に *1が続くわけだから
あなたの理解になにが足りないのかがわかるような気がしてきました。
「fact の引数が 1 である」と「fact の求値が 1 である」とを区別していないようですね
この二つは厳然として異なります
fact 0 = 1
は、fact(0) の「求値が」1 である、といっているのです
fact n = n * fact (n - 1)
は、たとえば
fact 8 = 8 * fact 7
fact 7 = 7 * fact 6
fact 6 = 6 * fact 5
fact 5 = 5 * fact 4
fact 4 = 4 * fact 3
fact 3 = 3 * fact 2
fact 2 = 2 * fact 1
という記述を纏めて表現しているのであり、これは fact n の「求値」は fact (n - 1) という、もともとの引数 n とは違う n - 1 という引数を使った fact の求値で定義しているのです
2019/02/03(日) 21:53:28.07ID:RwDwNYzW
もしかすると、だけど
fact 0 = 1
を実行した直後に
fact 1 = 1 * fact 0
が続くと考えている?
もうしそうだとしたらそこが間違いで
fact 0 = 1
fact n = n * fact(n - 1)
はそのどちらかしか実行されない
fact 0 = 1
を実行した直後に
fact 1 = 1 * fact 0
が続くと考えている?
もうしそうだとしたらそこが間違いで
fact 0 = 1
fact n = n * fact(n - 1)
はそのどちらかしか実行されない
>>54
>fact 0で1が出てきたら、
何が 1 となるのか、そこをはっきり書いてください、「出てきたら」っていいますが、「何が」 1 と出てきたら、なんでしょうか?
>また、勝手に再帰させて
何が 1 となるのか、0 となるのか、そこをはっきりさせないことには、それ以降の思考は不可能ですよ、あなたには「また勝手に再帰させて」とかいうことを考える段階ではありません
>fact 0で1が出てきたら、
何が 1 となるのか、そこをはっきり書いてください、「出てきたら」っていいますが、「何が」 1 と出てきたら、なんでしょうか?
>また、勝手に再帰させて
何が 1 となるのか、0 となるのか、そこをはっきりさせないことには、それ以降の思考は不可能ですよ、あなたには「また勝手に再帰させて」とかいうことを考える段階ではありません
2019/02/03(日) 21:57:58.25ID:5bolWXfM
2019/02/03(日) 21:58:56.17ID:DVkCUlxV
>>61
これは失礼…
これは失礼…
2019/02/03(日) 22:00:18.19ID:RwDwNYzW
>>60
ああ、良かった
>fact 0 = 1の結果はすぐ反映されるんじゃないの?
そうだよ。そして fact 0 は 1 を返すから、もう再帰呼出しは起こらないよね?
fact 3
= 3 * fact 2
= 3 * 2 * fact 1
= 3 * 2 * 1 * fact 0
= 3 * 2 * 1 * 1
= 6
ああ、良かった
>fact 0 = 1の結果はすぐ反映されるんじゃないの?
そうだよ。そして fact 0 は 1 を返すから、もう再帰呼出しは起こらないよね?
fact 3
= 3 * fact 2
= 3 * 2 * fact 1
= 3 * 2 * 1 * fact 0
= 3 * 2 * 1 * 1
= 6
2019/02/03(日) 22:02:19.10ID:5bolWXfM
>>63
いやいや終了条件が何も書かれてないから結局は続くよ
どのみちfact 0が1となるならまたfact(1-1)でfact(0)でしょ
間違ってないはずなんだけど何か使ってる人には常識的なお約束事とかあるのかな
いやいや終了条件が何も書かれてないから結局は続くよ
どのみちfact 0が1となるならまたfact(1-1)でfact(0)でしょ
間違ってないはずなんだけど何か使ってる人には常識的なお約束事とかあるのかな
2019/02/03(日) 22:02:55.82ID:DVkCUlxV
>>60
>fact 0 = 1の結果はすぐ反映されるんじゃないの?
ようするにそこでとまる
数学の階乗だから fact nの引数は再帰する度に-1される。
どこかで、factの引数が0になったら、それ以上は再帰しない
難しい話じゃないし、他の言語で再帰理解していたら、分かるはず
自分で落ち着いて考えてごらん
>fact 0 = 1の結果はすぐ反映されるんじゃないの?
ようするにそこでとまる
数学の階乗だから fact nの引数は再帰する度に-1される。
どこかで、factの引数が0になったら、それ以上は再帰しない
難しい話じゃないし、他の言語で再帰理解していたら、分かるはず
自分で落ち着いて考えてごらん
2019/02/03(日) 22:06:24.90ID:5bolWXfM
2019/02/03(日) 22:07:56.45ID:DdA3Wm74
>>64
fact 3
= 3 * fact 2
= 3 * 2 * fact 1
= 3 * 2 * 1 * fact 0 -- fact 0が・・
= 3 * 2 * 1 * 1 -- 1になる。factもうないのにここから何が続くの?
= 6
fact 3
= 3 * fact 2
= 3 * 2 * fact 1
= 3 * 2 * 1 * fact 0 -- fact 0が・・
= 3 * 2 * 1 * 1 -- 1になる。factもうないのにここから何が続くの?
= 6
2019/02/03(日) 22:08:07.10ID:RwDwNYzW
>どのみちfact 0が1となるならまたfact(1-1)でfact(0)でしょ
fact 1 = 1 * fact (1-1) = 1 * fact 0
となるけど、これは fact 1 の時の処理だね
fact 0 の場合は 1 を返すだけだから、fact(1-1) という処理はもう出てこないよ
今の話は
fact 3
= 3 * fact 2
= 3 * 2 * fact 1
= 3 * 2 * 1 * fact 0
= 3 * 2 * 1 * 1
= 6
のうち
3 * 2 * 1 * fact 0
が
3 * 2 * 1 * 1
に変化するところだよ
fact 1 = 1 * fact (1-1) = 1 * fact 0
となるけど、これは fact 1 の時の処理だね
fact 0 の場合は 1 を返すだけだから、fact(1-1) という処理はもう出てこないよ
今の話は
fact 3
= 3 * fact 2
= 3 * 2 * fact 1
= 3 * 2 * 1 * fact 0
= 3 * 2 * 1 * 1
= 6
のうち
3 * 2 * 1 * fact 0
が
3 * 2 * 1 * 1
に変化するところだよ
2019/02/03(日) 22:08:36.79ID:DVkCUlxV
>>66
だとすると文法自体理解していない あるいは関数自体
もっと、詳しく書くと
>どのみちfact 0が1となるならまたfact(1-1)でfact(0)でしょ
定義を見てごらん
fact 0 = 1 でこれは、=の右にfactが無いからこれで再帰はしないで、ここで終了
fact n = n * fact n-1 で=の右にfactがあるから再帰する
だとすると文法自体理解していない あるいは関数自体
もっと、詳しく書くと
>どのみちfact 0が1となるならまたfact(1-1)でfact(0)でしょ
定義を見てごらん
fact 0 = 1 でこれは、=の右にfactが無いからこれで再帰はしないで、ここで終了
fact n = n * fact n-1 で=の右にfactがあるから再帰する
2019/02/03(日) 22:10:11.03ID:5bolWXfM
>>67
= 3 * 2 * 1 * 1
= 3 * 2 * 1 * 1 * fact( 1 - 1 )
= 3 * 2 * 1 * 1 * 1 * fact ( 1 - 1)
どこまでも続くじゃない・・
= 3 * 2 * 1 * 1
= 3 * 2 * 1 * 1 * fact( 1 - 1 )
= 3 * 2 * 1 * 1 * 1 * fact ( 1 - 1)
どこまでも続くじゃない・・
2019/02/03(日) 22:11:04.78ID:DdA3Wm74
>>70
これはアカンよ…
これはアカンよ…
2019/02/03(日) 22:13:50.28ID:DdA3Wm74
>>70
中学校の数学でそうはならないってことは習うから、学校の数学でそこまで勉強してからプログラミングに手を出しても遅くないのでは?
中学校の数学でそうはならないってことは習うから、学校の数学でそこまで勉強してからプログラミングに手を出しても遅くないのでは?
2019/02/03(日) 22:14:19.16ID:5bolWXfM
>>69
fact 0 = 1で終了するというのが納得いってない
もしそうであれば1を返せば再帰は終了すると仮定したんだ
そもそもfact 0 = 1ってマクロ定義みたいなもんだし
直ちに評価されて式に代入されるよね
fact 0 = 1で終了するというのが納得いってない
もしそうであれば1を返せば再帰は終了すると仮定したんだ
そもそもfact 0 = 1ってマクロ定義みたいなもんだし
直ちに評価されて式に代入されるよね
2019/02/03(日) 22:17:47.65ID:DVkCUlxV
>>73
他の言語で再帰ってのは理解しているの?
fact 0 = 1で=の右にfactが無いから、再帰は終了 だから、終了条件は書かれている。
もしこれが理解できないのなら、関数定義とか、パターンマッチとかもっと基本的なことに
戻らないと理解できないと思う
他の言語で再帰ってのは理解しているの?
fact 0 = 1で=の右にfactが無いから、再帰は終了 だから、終了条件は書かれている。
もしこれが理解できないのなら、関数定義とか、パターンマッチとかもっと基本的なことに
戻らないと理解できないと思う
2019/02/03(日) 22:18:13.63ID:5bolWXfM
>>72
プログラミング言語は数学じゃないから
再帰から脱出するならそのためのコードは絶対必要なはずなんだ
それがないってことは仕掛けがあるはずで
その仮定が1を返せば再帰から脱出できるという考え
でも違うらしいから大混乱してる
プログラミング言語は数学じゃないから
再帰から脱出するならそのためのコードは絶対必要なはずなんだ
それがないってことは仕掛けがあるはずで
その仮定が1を返せば再帰から脱出できるという考え
でも違うらしいから大混乱してる
2019/02/03(日) 22:19:53.64ID:RwDwNYzW
2019/02/03(日) 22:21:37.72ID:5bolWXfM
>>74
Cで再帰させるなら終了条件にヒットしたらフラグたててreturnで戻ってく
関数定義の仕方ならサッと見たけど特に疑問はなかったよ
パターンマッチっていってもマクロ定義みたいなもんだし特にどうということも
Cで再帰させるなら終了条件にヒットしたらフラグたててreturnで戻ってく
関数定義の仕方ならサッと見たけど特に疑問はなかったよ
パターンマッチっていってもマクロ定義みたいなもんだし特にどうということも
2019/02/03(日) 22:22:31.24ID:RwDwNYzW
>>75
上に書いたけど、漸化式は理解している?
同じ書き方をします
Haskellは数学を基盤としているので、数学的な記述方法でプログラムが書けます
「再帰から脱出するならそのためのコードは絶対必要なはずなんだ」とあるけど、
もう書かれているよ
fact 0 = 1 って
上に書いたけど、漸化式は理解している?
同じ書き方をします
Haskellは数学を基盤としているので、数学的な記述方法でプログラムが書けます
「再帰から脱出するならそのためのコードは絶対必要なはずなんだ」とあるけど、
もう書かれているよ
fact 0 = 1 って
2019/02/03(日) 22:24:44.77ID:5bolWXfM
2019/02/03(日) 22:25:28.82ID:RwDwNYzW
>fact 0は1なんだからその次はfact(1)になるでしょ
その次はもうないよ
その次はもうないよ
2019/02/03(日) 22:26:23.52ID:5bolWXfM
2019/02/03(日) 22:26:31.18ID:DdA3Wm74
>>79
ならないよ。そこが間違ってるんだよ。
ならないよ。そこが間違ってるんだよ。
2019/02/03(日) 22:28:21.00ID:RwDwNYzW
84デフォルトの名無しさん
2019/02/03(日) 22:28:40.54ID:I0qputsI >>42
1で止まる仕様と言うか。。。
掛け算だから1を返すだけ(掛けても変わらない数)で、足し算なら0を返すよ。
sum1toN 0 = 0
sum1toN n = n + sum1toN (n - 1)
1で止まる仕様と言うか。。。
掛け算だから1を返すだけ(掛けても変わらない数)で、足し算なら0を返すよ。
sum1toN 0 = 0
sum1toN n = n + sum1toN (n - 1)
2019/02/03(日) 22:28:53.80ID:DdA3Wm74
2019/02/03(日) 22:30:37.00ID:5bolWXfM
2019/02/03(日) 22:30:46.46ID:o+jOfHnE
この人の脳内だと、
fact 0 = 1
が
fact 0 = fact 1
になってるんじゃないだろうか
fact 0 = 1
が
fact 0 = fact 1
になってるんじゃないだろうか
2019/02/03(日) 22:32:38.86ID:5bolWXfM
>>85
PythonやJavaは知らないのでなんとも
PythonやJavaは知らないのでなんとも
2019/02/03(日) 22:33:23.20ID:DVkCUlxV
この人 77で書いてるけど、文法まともに読んでないんだよ
Haskell 文法自体は一見綺麗で簡単そうに見えるけど
実際には、理解するのが非常に難しい(今回の再帰のとこじゃないんだけど)
適当に文法流し読みして理解しようとするのが 間違っている
もっとも、階乗の再帰は、他の人の説明で理解できるだろうと思うが
Haskell 文法自体は一見綺麗で簡単そうに見えるけど
実際には、理解するのが非常に難しい(今回の再帰のとこじゃないんだけど)
適当に文法流し読みして理解しようとするのが 間違っている
もっとも、階乗の再帰は、他の人の説明で理解できるだろうと思うが
2019/02/03(日) 22:34:03.06ID:DdA3Wm74
>>86
fact 0は1なんだから、
fact 3
= 3 * fact 2
= 3 * 2 * fact 1
= 3 * 2 * 1 * fact 0 -- fact 0が・・
= 3 * 2 * 1 * 1 -- 1になる。factもうないのにここから何が続くの?
= 6
はい!ここで一旦休憩!君に問題。
3 * 2 * 1 * 1はいくつだ?
fact 0は1なんだから、
fact 3
= 3 * fact 2
= 3 * 2 * fact 1
= 3 * 2 * 1 * fact 0 -- fact 0が・・
= 3 * 2 * 1 * 1 -- 1になる。factもうないのにここから何が続くの?
= 6
はい!ここで一旦休憩!君に問題。
3 * 2 * 1 * 1はいくつだ?
2019/02/03(日) 22:34:30.64ID:RwDwNYzW
うーん、C言語だと
int fact(int n)
{
if (n == 0) return 1;
else return n * fact (n - 1);
}
と書くのと同じなんだけどねえ
int fact(int n)
{
if (n == 0) return 1;
else return n * fact (n - 1);
}
と書くのと同じなんだけどねえ
2019/02/03(日) 22:37:00.44ID: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は続くよ
だから色々納得いかないことあるんだけど
だから
=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は続くよ
だから色々納得いかないことあるんだけど
2019/02/03(日) 22:37:36.15ID:QPZpvG6g
もうHaskellはあきらめるんだ……
2019/02/03(日) 22:39:05.88ID:RwDwNYzW
>>92
この1行目はどこから出てきたの?
=3 * 2 * 1 * 1 * fact(1-1)
この辺を脳内でテキトーに処理してるからわからないんだよ
fact 3
のところから地道に書きながら置き換えてみな
この1行目はどこから出てきたの?
=3 * 2 * 1 * 1 * fact(1-1)
この辺を脳内でテキトーに処理してるからわからないんだよ
fact 3
のところから地道に書きながら置き換えてみな
2019/02/03(日) 22:41:48.43ID:5bolWXfM
2019/02/03(日) 22:42:17.34ID:DdA3Wm74
>>92
算数のテストで
3 * 2 * 1 * 1は?って問題に、
3 * 2 * 1 * 1 * fact(1-1)って答えるの?
それは算数でも数学でもプログラミング言語でも間違いだよ。
算数でも数学でもプログラミング言語でも答えは6だよ。
算数のテストで
3 * 2 * 1 * 1は?って問題に、
3 * 2 * 1 * 1 * fact(1-1)って答えるの?
それは算数でも数学でもプログラミング言語でも間違いだよ。
算数でも数学でもプログラミング言語でも答えは6だよ。
2019/02/03(日) 22:42:33.19ID:RwDwNYzW
2019/02/03(日) 22:43:47.92ID:5bolWXfM
>>96
そこはどうでもいいところだから書かなかった
そこはどうでもいいところだから書かなかった
2019/02/03(日) 22:43:59.88ID:RwDwNYzW
100デフォルトの名無しさん
2019/02/03(日) 22:44:48.18ID:RwDwNYzW >>98
どうでもよくないから君は間違っている
どうでもよくないから君は間違っている
101デフォルトの名無しさん
2019/02/03(日) 22:45:27.31ID:5bolWXfM102デフォルトの名無しさん
2019/02/03(日) 22:45:46.73ID:wI7xL3t+ >>95
左辺から右辺に書き換えるって分かってる?
左辺から右辺に書き換えるって分かってる?
103デフォルトの名無しさん
2019/02/03(日) 22:49:36.42ID:5bolWXfM >>99
=3 * 2 * 1 * 1
=3 * 2 * 1 * 1 * 1
=3 * 2 * 1 * 1 * 1 * 1
・・・
やっぱり変わんないよ?
何かやってる人には常識だからあえて書いていないとかのお約束ごととかある言語なんじゃないかなぁ・・
パッと見た感じそんなに難しい言語には見えないけど内容に納得できない
=3 * 2 * 1 * 1
=3 * 2 * 1 * 1 * 1
=3 * 2 * 1 * 1 * 1 * 1
・・・
やっぱり変わんないよ?
何かやってる人には常識だからあえて書いていないとかのお約束ごととかある言語なんじゃないかなぁ・・
パッと見た感じそんなに難しい言語には見えないけど内容に納得できない
104デフォルトの名無しさん
2019/02/03(日) 22:50:08.66ID:PKgH5/Eo >>98
どうでもよくないよ。正しい流れは、
fact 3
= 3 * fact 2
= 3 * 2 * fact 1
= 3 * 2 * 1 * fact 0
= 3 * 2 * 1 * 1
= 6
なのに、>>92によるとあなたは、
fact 3
= 3 * fact 2
= 3 * 2 * fact 1
= 3 * 2 * 1 * fact 0
= 3 * 2 * 1 * 1
= 3 * 2 * 1 * 1 * fact(1-1)
= 3 * 2 * 1 * 1 * 1 * fact(1-1)
= 3 * 2 * 1 * 1 * 1 * 1 * fact(1-1)
であるという。
正しい答え6にたどり着かない原因はあなたが
3 * 2 * 1 * 1
= 3 * 2 * 1 * 1 * fact(1-1)
と変形(?)してしまっているところなのは明らか。
どうでもよくないよ。正しい流れは、
fact 3
= 3 * fact 2
= 3 * 2 * fact 1
= 3 * 2 * 1 * fact 0
= 3 * 2 * 1 * 1
= 6
なのに、>>92によるとあなたは、
fact 3
= 3 * fact 2
= 3 * 2 * fact 1
= 3 * 2 * 1 * fact 0
= 3 * 2 * 1 * 1
= 3 * 2 * 1 * 1 * fact(1-1)
= 3 * 2 * 1 * 1 * 1 * fact(1-1)
= 3 * 2 * 1 * 1 * 1 * 1 * fact(1-1)
であるという。
正しい答え6にたどり着かない原因はあなたが
3 * 2 * 1 * 1
= 3 * 2 * 1 * 1 * fact(1-1)
と変形(?)してしまっているところなのは明らか。
106デフォルトの名無しさん
2019/02/03(日) 22:51:48.54ID:5bolWXfM >>102
普通にやったけど特に問題なかったよ
普通にやったけど特に問題なかったよ
>>79
>fact 0は1なんだからその次はfact(1)になるでしょ
ちがいますよ。なんども言っていますが「fact 0 は 1 」、っていう言葉が不正確ですね、fact 0 の「何が」 1 なんでしょうか?
>fact 0は1なんだからその次はfact(1)になるでしょ
ちがいますよ。なんども言っていますが「fact 0 は 1 」、っていう言葉が不正確ですね、fact 0 の「何が」 1 なんでしょうか?
108デフォルトの名無しさん
2019/02/03(日) 22:54:17.35ID:5bolWXfM111デフォルトの名無しさん
2019/02/03(日) 22:56:02.92ID:5bolWXfM >>107
不正確と言われても他に言いようがないし
不正確と言われても他に言いようがないし
112デフォルトの名無しさん
2019/02/03(日) 22:56:26.62ID:o+jOfHnE 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)
}
}
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)
}
}
113デフォルトの名無しさん
2019/02/03(日) 22:57:55.66ID:o+jOfHnE あっとボケた。>>112のfibはfactの間違い
114デフォルトの名無しさん
2019/02/03(日) 22:58:05.17ID:5bolWXfM >>111
あなたは 「fact 0 が 1 」といっていますが、我々は「fact 0 の値が 1」と「fact の引数が 1」とを別のものとして区別しているのです
あなたは区別していますか?あるいは「fact 0 が 1」というけれども fact 0 の何が 1 なんですか?
あなたは 「fact 0 が 1 」といっていますが、我々は「fact 0 の値が 1」と「fact の引数が 1」とを別のものとして区別しているのです
あなたは区別していますか?あるいは「fact 0 が 1」というけれども fact 0 の何が 1 なんですか?
116デフォルトの名無しさん
2019/02/03(日) 22:59:39.94ID:RwDwNYzW118デフォルトの名無しさん
2019/02/03(日) 23:01:37.23ID:5bolWXfM119デフォルトの名無しさん
2019/02/03(日) 23:01:49.80ID:PKgH5/Eo >>108
> fact 0 = 1とか定義されちゃってるから変形もなにもあの形にしかならんでしょう
いいえその形には絶対になりません。
「fact 0 = 1とか定義されちゃってるから」
= 3 * 2 * 1 * fact 0
は
= 3 * 2 * 1 * 1
になります。うん、これはいい。次。
「fact 0 = 1とか定義されちゃってるから」
= 3 * 2 * 1 * 1
は
= 3 * 2 * 1 * 1 * fact(1-1)
になります?いいえ、なりません。勝手に足した「 * fact(1-1)」どっから出てきたんだ。
3 * 2 * 1 * 1は6です。
> fact 0 = 1とか定義されちゃってるから変形もなにもあの形にしかならんでしょう
いいえその形には絶対になりません。
「fact 0 = 1とか定義されちゃってるから」
= 3 * 2 * 1 * fact 0
は
= 3 * 2 * 1 * 1
になります。うん、これはいい。次。
「fact 0 = 1とか定義されちゃってるから」
= 3 * 2 * 1 * 1
は
= 3 * 2 * 1 * 1 * fact(1-1)
になります?いいえ、なりません。勝手に足した「 * fact(1-1)」どっから出てきたんだ。
3 * 2 * 1 * 1は6です。
120デフォルトの名無しさん
2019/02/03(日) 23:03:02.44ID:RwDwNYzW 理解できたようで良かったけど、結局は
>>57 がわかってなかったということだなあ
>>57 がわかってなかったということだなあ
121デフォルトの名無しさん
2019/02/03(日) 23:03:24.76ID:5bolWXfM これは説明書きに書いておいて欲しかったなー
これじゃわかりようがないわ
これじゃわかりようがないわ
122デフォルトの名無しさん
2019/02/03(日) 23:03:29.59ID:PKgH5/Eo >>118
よかったね。君へのレスで「パターンマッチ」を検索してごらん
よかったね。君へのレスで「パターンマッチ」を検索してごらん
124デフォルトの名無しさん
2019/02/03(日) 23:04:21.15ID:RwDwNYzW125デフォルトの名無しさん
2019/02/03(日) 23:04:27.74ID:5bolWXfM 完全解決してスッキリ
みんな時間とらせてしまってごめん
そしてありがとう
みんな時間とらせてしまってごめん
そしてありがとう
126デフォルトの名無しさん
2019/02/03(日) 23:06:11.09ID:RwDwNYzW >>125 がんばれよー
127デフォルトの名無しさん
2019/02/03(日) 23:06:13.09ID:9SI0qp6C fact 0 = 1 は、fact 0 = fact (fact 0)ではありません。
128デフォルトの名無しさん
2019/02/03(日) 23:06:37.09ID:PKgH5/Eo129デフォルトの名無しさん
2019/02/03(日) 23:11:25.99ID:RwDwNYzW >>122 が言っている「パターンマッチ」を彼が調べてくれるといいね
130デフォルトの名無しさん
2019/02/04(月) 07:18:20.69ID:eX/1kX5o >>92
だから、fact 1-1になった後、fact 0になるだろ?
そしたらfact 0 = 1になるんだよ。
数学の数学的帰納法ググれ。
fact 0 = 1
これはfactの引数が0なら強制的に1になると言ってる。
fact n = n * fact (n - 1)
これはfact nを解くには引数のnに、nより1つ小さい数をfactに渡したものを掛けたものと等しいと言っている。
(そして最終的にfact 0で1が返って全体の値が求まる)
fact 3
= 3 * fact (3 - 1)
= 3 * fact 2
= 3 * 2 * fact (2 - 1)
= 3 * 2 * fact 1
= 3 * 2 * 1 * fact (1 - 1)
= 3 * 2 * 1 * fact 0
= 3 * 2 * 1 * 1 ― fact 0 = 1より
= 6
だから、fact 1-1になった後、fact 0になるだろ?
そしたらfact 0 = 1になるんだよ。
数学の数学的帰納法ググれ。
fact 0 = 1
これはfactの引数が0なら強制的に1になると言ってる。
fact n = n * fact (n - 1)
これはfact nを解くには引数のnに、nより1つ小さい数をfactに渡したものを掛けたものと等しいと言っている。
(そして最終的にfact 0で1が返って全体の値が求まる)
fact 3
= 3 * fact (3 - 1)
= 3 * fact 2
= 3 * 2 * fact (2 - 1)
= 3 * 2 * fact 1
= 3 * 2 * 1 * fact (1 - 1)
= 3 * 2 * 1 * fact 0
= 3 * 2 * 1 * 1 ― fact 0 = 1より
= 6
131デフォルトの名無しさん
2019/02/04(月) 07:24:43.06ID:eX/1kX5o ただし、fact 0の様な特殊な条件を上に書く必要がある(Haskellに限らず、どの言語も)
132デフォルトの名無しさん
2019/02/04(月) 07:30:26.48ID:eX/1kX5o スタック消費しない末尾再帰とか、まだ先があるのに先が思いやられる。。。
(末尾再帰も最近じゃCやJavaScriptでも効くらしい。実質ループだから使った事ないけど)
(末尾再帰も最近じゃCやJavaScriptでも効くらしい。実質ループだから使った事ないけど)
133デフォルトの名無しさん
2019/02/04(月) 11:21:38.86ID:66n6O4Xc 遅延評価や並行並列がデフォルトの言語ならばスタック消費しないのは当たり前である
134デフォルトの名無しさん
2019/02/04(月) 11:34:48.97ID:nZpfKraZ へっ?
135デフォルトの名無しさん
2019/02/04(月) 11:56:25.98ID:66n6O4Xc 人間の読解力なんて順調に行っても1日1行程度でしかない
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 高市首相答弁を“引き出した”立民・岡田克也氏が改めて説明「なぜ慎重な答弁をされなかったのか。非常に残念に思っている」 ★8 [ぐれ★]
- 【外交】元台湾総統・馬英九氏、高市首相発言に「台湾を危険にさらす」台湾海峡の問題は「両岸の中国人が自ら話し合うべき」★2 [1ゲットロボ★]
- 「母の部屋に安倍氏が表紙の機関誌が」「(安倍氏が被害者なのは)不思議に思いませんでした」山上被告の妹が証言 [おっさん友の会★]
- 【芸能】俳優・野村宏伸 テレビドラマの制作費やギャラの現状訴え 「比べものにならない位、今は低くて…」 [冬月記者★]
- 【野球】大谷翔平、佐々木朗希、山本由伸らがWBC辞退なら広がる不協和音… 『過去イチ盛り上がらない大会』になる可能性も★2 [冬月記者★]
- 【国際】ロシアはすでに戦争準備段階――ポーランド軍トップが警告 [ぐれ★]
- 【悲報】資産400億投資家「日本円ガチホはアホ、アベノミクス並みの自国通貨安売り後進国狙い政策でみんな貧乏外国からの仕事で頑張って [733893279]
- 【高市売り】円安、止まらず!凄い勢いで暴落中。157円へ [219241683]
- 【悲報】自民党のヒゲ、外務省局長と中国高官の写真にブチギレwwwwwwwwwwwwww [834922174]
- 麻生太郎、腹をくくる「日本国民が高市を総理に選んだ。であるならば最期まで支えるのが私たちの役目」 [329329848]
- 【悲報】ヤフコメ民「中国が水産物を輸入禁止にするなら、日本国民向けに安く販売すればいい。中国依存から脱するべき」 [153736977]
- おじゃる丸実況をするためのお🏡
