如何解决在 OCaml 中实现 zip
我有 haskell
的背景,现在正在学习 OCaml
。
我正在尝试将 zip
实现为练习,但出现语法错误;什么是正确的语法?
let rec zip (l1 : 'a list) (l2 : 'b list) : ('a * 'b) list =
match l1 l2 with
[] _ -> []
| _ [] -> []
| (x::xs) (y::ys) -> (x,y)::(zip xs ys)
解决方法
当您解构/构造一对时,您需要在其成员之间放置一个 ,
。
这意味着您的 zip 函数变为:
let rec zip (l1 : 'a list) (l2 : 'b list) : ('a * 'b) list =
match l1,l2 with
| [],_ -> []
| _,[] -> []
| (x::xs),(y::ys) -> (x,y)::(zip xs ys)
另外请注意,当模式匹配的几种情况返回相同的值时,OCaml 会提供 or-patterns
,这不是模式:
_ []
没有由函数应用程序组成的模式。这使它成为一个语法错误,而不仅仅是前面表达式 l1 l2
中的语义问题。
(经过编辑以给出实际错误的模式。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。