首页 > 解决方案 > OCAML:合并 2 个列表的最简单方法

问题描述

示例:合并 [o;d] [l;n] 返回 [o;l;d;n]

let rec merge (x::t1) (y::t2) = 
     x::y::merge t1 t2;;

这给出了异常:Match_failure ("//toplevel//", 1, 14)

合并后 [o;d] [l;n]

标签: ocaml

解决方案


您可能会错过两个简单的案例并使用错误的匹配表达式语法。

let name = function xx | yy | zz是一个语法糖let name x = match x with xx | yy | zz

let rec merge a b = match (a,b) with
  | (x::xs), (y::ys) -> x::y::merge xs ys
  | xs,[] -> xs
  | [],ys -> ys;;

语法糖版本:

let rec merge = function 
    | x::xs -> (function y::ys -> x::y::merge xs ys | [] -> x::xs)
    | [] -> function ys -> ys

merge是一个接受一个参数并返回另一个函数的函数。


推荐阅读