簡単な質問です。F#なぜこの返品の種類がありますか?
私は2つの文字列とintをとり、n
行の新しい文字列を返し、2つの入力文字列を交互にする関数を持っています。
let rec f s1 s2 n = function
| s1 when n > 0 -> s1 + "\n" + f s2 s1 (n-1)
| s2 when n > 0 -> s2 + "\n" + f s1 s2 (n-1)
f "ab" "cd" 4
それを呼び出すと、私は現在、私の方法のエラーを取得し、私はなぜわからないab\ncd\nab\ncd
を返す必要があります。何かヒント?
UPDATE:
結局のところ、それは匿名function
を使用することによって引き起こされています。上記機能は、正しい方向へのステップであるかもしれないが、以下の実装は、TheQuickBrownFoxにより指摘したように正しいものである:
let rec f s1 s2 n =
match s1 with
| _ when n <= 0 -> ""
| s1 when n > 0 -> s1 + "\n" + f s2 s1 (n-1)
| s2 when n > 0 -> s2 + "\n" + f s1 s2 (n-1)
UPDATE 2:match
式にそれを変更すると、それを解決します。
let rec f s1 s2 n =
if n <= 0 then ""
else s1 + "\n" + f s2 s1 (n-1)
あなたのアップデートに合わせて自分の答えを更新しました。 – TheQuickBrownFox