2011-11-13 13 views
3

私はフィボナッチ数列を生成する関数があります。OCamlはフィボナッチ数のリストを作成

let rec fib n = 
    match n with 
    | (0 | 1) -> 1 
    | x when x > 0 -> (fib (x-2) + fib (x-1)) 
    | _ -> raise (Invalid_argument "Negative value supplied to fib");; 

が、それは言った番号のリストを返すようにするために、私が本当にしたいことはあるが。

let rec fib n list = 
    match n with 
    | (0 | 1) -> 1 :: [] 
    | x when x > 0 -> (fib (x-2) list + fib (x-1) list) :: list 
    | _ -> raise (Invalid_argument "Negative value supplied to fib");; 

しかし

File "main.ml", line 2, characters 4-174: Error: This expression has type int list but an expression was expected of type int

(4-174が一致ブロックに対応して2行目の文字が)はocamlc言う:私はこれを試してみました。私はこれが型 "int list"を返すようにしたいのですが、なぜint型を推論していますか? (+)がパラメータとしてintがかかるため

答えて

4

表現fib (x - 2) list + fib (x - 1) listは、intを返すようにfibが必要です。

+0

ああ、ありがとう!それはあなたがそれを指摘するときにとても明らかです... – user1044459

+0

@ user1044459どのように解決しましたか?コードを共有していただけますか? – Erhan

関連する問題