在SML中,使用currying和pattern匹配来定义函数是很常见的。这是一个简单的例子:
fun zip [] _ = []
| zip _ [] = []
| zip (x::xs) (y::ys) = (x,y)::(zip xs ys)
忽略库函数,将此端口移植到OCaml的最佳方法是什么?据我所知,没有简单的方法来使用currying和pattern匹配来声明函数。
答案 0 :(得分:11)
我想说最好只使用匹配表达式。
let rec zip xs ys =
match xs, ys with
| [], _
| _, [] -> []
| x :: xs, y :: ys -> (x, y) :: zip xs ys
如果你没有使用匹配,那就有点复杂,但你可以这样做。
let rec zip = function
| [] -> (fun _ -> [])
| x :: xs ->
function
| [] -> []
| y :: ys -> (x, y) :: zip xs ys