2010-11-28 18 views
1

ocamlのif-elseループ内で複数の操作を実行できますか?ネストされたif - elseステートメント-ocaml

私は次の操作を実行しようとしています

let rec appendtolist n list b = 

    let f x = 

     if (b < 0) then x 

     else if (b == 0) then ((appendtocode n (List.hd list)) (b-1)) (* THIS LINE *) 

     else ((appendtocode n (List.hd list)) :: (appendtolist n (List.tl list) (b-1))) 

    in 

    f list 

    ;; 

私は大胆なことを作っライン上のコンパイラで文句を取得:この式は関数ではありません

を、それが適用できません

b==0のときに私の関数を呼び出し、また、デクリメント値をbとしたいとします。

この場合、どうすればいいですか?

お知らせください。

ありがとうございます。

答えて

2

これは基本的にはbeforeと同じエラーです。

あなたは ない関数である値を返します

appendtocode n (List.hd list) 

を評価してい

。次に、引数としてb-1で呼び出そうとしますが、関数ではないので、そのことはできません。

b == 0のときに関数を呼び出し、bの値を減らしたいとします。

デクレメントbは誰ですか? bは関数appendtolistへの引数です。したがって、appendtolistを再帰的に呼び出すと、の新しい引数を指定することができます。これはelseのケースで実行しているもので、うまくいきます。しかしthenの場合はappendtolistに電話していません。 appendtocodeappendtocodeには第3引数bがありません。したがって、それを渡すことは意味をなさない。b-1

b-1を削除すると、あなたのプログラムはうまく動作します。

PS:この問題はネストされたifとはまったく関係ありません。

+0

appendtocodeは文字列を返します。私はそれを呼び出してbの値を減らしたい。 – JJunior

+0

gr8!私はb-1を削除して、appendlistをもう一度呼び出しました。仕事gr8!ありがとう:)混乱して申し訳ありません。まだこの言語を学ぼうとしています:) – JJunior

1

クイック推測:

式は関数ではありません

(appendtocode n (List.hd list)) 

として戻って何かを与え、ひいてはあなたは何をしていることに(B-1)の値を適用することはできませんあなたはしようとしている。確認するには、タイプ appendtocodeを検索し、2〜3つのカリー引数を取ることができます。

+0

私はappendtodeにb-1を適用したくありません。私はちょうどこの機能でb-1を減らしたいと思う。 – JJunior

関連する問題