我的练习有问题!
我的想法是创建两个函数:
[ai + 1, ..., an]
[ai + 1, ..., an, a1, ..., ai]
问题是我刚刚开始使用Ocaml进行编程,而且我不太了解如何使用它。所以我有一些错误,我不知道如何解决。 我的代码是这样的:
let rec produceprima l i =
let rec produceprima_aux l i acc=
let rec aux l i acc l1 =
match l with
[]-> []
|x::y -> if(acc>i) then aux y i acc+1 l1@[x]
else aux y i acc+1 l1
in aux l i acc l1
in produceprima_aux l i acc;;
let rec produceseconda l i =
let rec produceseconda_aux l i acc=
let rec aux l i acc l1 =
match l with
[]-> []
|x::y -> if(acc<=i) then aux y i acc+1 l1@[x]
in aux l i acc l1
in produceseconda_aux l i acc;;
第一个功能的错误是:
Error: This expression has type 'a -> 'b list
but an expression was expected of type int
第二个功能我必须尝试,但肯定它有错误!
答案 0 :(得分:0)
表达式f x+1
由编译器解析为(f x) + 1
。事实上,您省略了操作员名称周围的空格并没有给它任何优先权。因此,您应该写aux y i (acc+1) l1
,而不是aux y i acc+1 l1
。
这是一个非常常见的错误。我建议你试试OCamlPro教程。特别是,第5课,侧重于语法陷阱。