Pertanyaan Pencampuran pola pencocokan dan currying di OCaml


Di SML, ini umum dan mudah untuk mendefinisikan fungsi menggunakan pencocokan pola dan curry. Inilah contoh sederhana:

fun zip [] _ = []
  | zip _ [] = []
  | zip (x::xs) (y::ys) = (x,y)::(zip xs ys)

Mengabaikan fungsi-fungsi perpustakaan, apa cara terbaik untuk mem-port ini ke OCaml? Sejauh yang saya tahu, tidak ada cara mudah untuk mendeklarasikan fungsi menggunakan currying dan pattern matching.


9
2017-09-11 02:03


asal


Jawaban:


Saya akan mengatakan yang terbaik adalah hanya menggunakan ekspresi kecocokan.

let rec zip xs ys = 
    match xs, ys with
    | [], _
    | _, [] -> []
    | x :: xs, y :: ys -> (x, y) :: zip xs ys

Jika Anda tidak menggunakan pencocokan, itu sedikit berbelit-belit, tetapi Anda dapat melakukan ini.

let rec zip = function
    | [] -> (fun _ -> [])
    | x :: xs ->
        function 
        | [] -> []
        | y :: ys -> (x, y) :: zip xs ys

11
2017-09-11 02:20