小编Hea*_*top的帖子

在 OCaml 中使用“of”关键字

of在这些惰性列表的定义和使用该类型的函数中,关键字的作用是什么?它只是一个定义 类型的构造函数Cons,以便它接受 aunit并计算 a llist,还是还有更多需要考虑?

type 'a llist = Cons of 'a  * (unit -> 'a llist)

let rec lnat i = Cons (i, (fun () -> lnat (i + 1)))
Run Code Online (Sandbox Code Playgroud)

(-lnat函数接受一个 int 并从该输入 int 开始构造一个所有自然数的列表)。

ocaml types functional-programming keyword lazy-evaluation

3
推荐指数
1
解决办法
1404
查看次数

在 OCaml 中递归删除重复尾部

我尝试通过迭代一个带有空列表的列表来编写complst自己的解决方案,其中所有非重复项都被插入然后返回。在查找解决方案后,我知道这是一种过于复杂的方法,但仍然想了解为什么模式匹配不能按预期工作:

let compress list =
  let rec aux complst lst =
    match lst with 
    | [] -> complst
    | a :: (b :: c) -> if a = b then aux complst (b::c) else aux (a::complst) (b::c)
    | x -> x  
  in aux [] list;;
val comp : 'a list -> 'a list = <fun>
Run Code Online (Sandbox Code Playgroud)

无论输入如何,输出始终是一个仅包含最后一个元素的列表:

 compress [1;1;2;2;3];;
- : int list = [3]

 compress [1;2;3];;
- : int list = [3]
Run Code Online (Sandbox Code Playgroud)

recursion ocaml functional-programming list pattern-matching

1
推荐指数
1
解决办法
182
查看次数