6

F# でこの Haskell を実行するにはどうすればよいですか?

f acc (x:y:z:xs) = f (acc-x+y*z) xs
f acc [] = acc

そこのアルゴリズムは任意です。重要な点は、リストの最初の 3 つと末尾を選択することです。それらすべてと末尾を使用する必要があるからです。

xy と z をポップするために繰り返し head 呼び出しを使用して、F# で命令的に記述する必要がありますか?

編集: この手法が haskell で正式に呼ばれているものをコメントしてください。他の人の将来の検索のために質問のタイトルに入れます。

4

2 に答える 2

15

パターン マッチが失敗したときに何をしたいですか? おそらくこれが必要です:

let rec f acc = function
  | x::y::z::xs -> f (acc-x+y*z) xs
  | _ -> acc
于 2012-07-26T20:54:25.773 に答える
2

こんな感じ?

let rec f acc (x::y::z::xs) = f(acc - x + y * z) xs

ただし、この関数は常に MatchFailureException で終了することに注意してください。これは、3 要素未満の末尾に到達するまで f を積極的に評価しようとするためです。

于 2012-07-26T20:52:46.743 に答える