到目前为止我已经
了let flipeven(listname)=
let newlist= [] in
let first=0 in
let second=1 in
let stop= List.length(listname)-1 in
let rec flipevenhelper (x,y)=
if (second<= stop) then
insert((List.nth(listname) x), newList) in
insert((List.nth(listname) y), newList) in
let second=second+2 in
let first=first+2 in
flipevenhelper (first, second)
else
newList;;
但是只是在else语句中收到语法错误。我究竟做错了什么?
编辑:
这是插入功能
let rec insert (x,y) = match (x, y) with
| (x,[ ]) -> x::[]
| (x,y::ys) -> if (x>y) then (y:: insert(x, ys))
else (x::y::ys);;
答案 0 :(得分:3)
in
关键字始终与let
关键字配对。这不是加入两个表达式的一般方法,这是你似乎想要的。
OCaml 中的;
运算符将两个表达式连接到一个表达式中。第一个表达式被计算但后来被忽略(它应该有unit
类型)。计算第二个表达式,其值是组合表达式的值。
请注意,;
的优先级低于if/then/else
(在某种意义上)。因此,如果您使用then
运算符,则应在;
之后对表达式加以括号。
这是一个小例子:
# if 3 > 2 then Printf.printf "yes\n"; 4 else 5;;
Error: Syntax error
# if 3 > 2 then (Printf.printf "yes\n"; 4) else 5;;
yes
- : int = 4
修复语法后,仍有许多问题需要解决。特别是,您应该意识到OCaml中的变量和列表是不可变的。您只需拨打newList
即可将insert
插入到列表中。