【发布时间】:2019-04-23 18:00:51
【问题描述】:
我必须创建一个函数来获取列表并返回第一个和最后一个元素对的列表,第二个和第二个最后一个等等列表是否有偶数或奇数个元素都没有关系,因为如果它奇怪的是我会忽略中间元素。我的想法是制作一个新的rec乐趣,它将旧列表及其反向作为输入我认为我完成了代码但我得到了语法错误;;
let lip l =
if [] then []
else let l1=l l2=List.rev l in
let rec lp l1 l2 = match l1,l2 with
| [],[] ->[]
| [],h2::t2->[]
| h1::_,h2::_ ->
if (List.length l -2) >= 0 then [(h1,h2)]@ lp(List.tl l1) t2
else [] ;;
【问题讨论】:
-
一个问题肯定是
if []——要么写if l = []要么match l with | [] -> [] | otherpattern -> somelist -
let l1=l l2=List.rev l in中的多个绑定也不起作用 -- ` let l1=l in let l2=List.rev l in. Not sure why you introducel1` 作为l的别名.t2也是一个未知变量——它应该是一个附加参数还是一个错字? -
t2受模式匹配的约束。它不是一个未定义的变量。 -
啊,对了,刚刚看到了……只是在那个分支里不见了。
-
哎呀——好点子!
标签: ocaml