ハスケルでMersenne numberを表示する簡単な再帰関数を作成する作業があります。最小のものから最大のものにソートされています。 そうmersenne 7
basicly 2^n-1の のは、我々はそれが悲しげに成し遂げることができませんでしたし、コードのその部分に貼付されていること[0,1,3, 7, 15, 31, 63]
Haskellでのメルセンヌ数の計算
ようになります。
mrs :: Integer -> [Integer]
mrs 1 = [0]
mrs n = n : mrs (2^(n-1)-1)
しかし、nが低くなっているので、彼らは減少するはずである一方で何とか数字のサイズが増加しています。私はそれが解決するのは簡単だと思うし、後で気分が落ちるだろうが、そうだ。 [3,3,3,3...]
、それはnegativ指数について私に告げるよりも低い:
は現在、入力7
のために、それは常に3
年代を吐く入力3
について[7, 63, 46.........giant number, error]
を出してくれる。
ハスケルにとっては新しく、スクリプトを使ったグーグルと読書はうまくいきませんでした。
をあなたはそれを減少していない、あなたの数nを毎回増加しています。 '2 ^(n-1)-1'は、各呼び出し時に関数に渡す新しい' n'値です。 – jkeuhlen
数字は減少していません。あなたは2 ^(n-1)-1でmrsを呼び出しています。リストに入れる数字と計算する数字を逆にしたようです。 – Axnyff
'mrs n 'を呼び出すと、' n'は何を表しているのでしょうか? –