ocaml - 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]
解决方案
您可能会错过两个简单的案例并使用错误的匹配表达式语法。
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
是一个接受一个参数并返回另一个函数的函数。
推荐阅读
- jmeter - 将测试计划移动到新机器时使用 jmeter 获得 401 Unauthorized
- php - 正则表达式删除帖子引号
- r - R重塑数据框
- php - 为什么我使用 php api 脚本时会不断出错?
- r - R:XGBoost 和特征散列。MError不断增加
- java - java中用于mongodb的日期查询
- xamarin - 在 Xamarin.forms 中使用编辑器标记时,在软键盘中将“下一个箭头键”更改为“完成”
- git - Git:VS Code 中的克隆返回“权限被拒绝,请重试” - 终端中的 git clone 有效
- mysql - 使用 CONVERT_TZ 会导致性能问题?
- c# - C# MVC 4.5 上的一个局部视图中的两个模型