小编ppa*_*l74的帖子

尾递归函数,用于在Ocaml中查找树的深度

我的tree定义类型如下

type 'a tree = Leaf of 'a | Node of 'a * 'a tree * 'a tree ;;
Run Code Online (Sandbox Code Playgroud)

我有一个函数来查找树的深度如下

let rec depth = function 
    | Leaf x -> 0
    | Node(_,left,right) -> 1 + (max (depth left) (depth right))
;;
Run Code Online (Sandbox Code Playgroud)

这个函数不是尾递归的.有没有办法让我以尾递归的方式编写这个函数?

tree binary-tree ocaml functional-programming

33
推荐指数
2
解决办法
6694
查看次数

如何从OCaml中的for循环中获取值

我编写了以下代码,从列表中随机选择n个项目,并将选择放在新列表中.代码如下

let random_extract list n =
    let l =  ((List.length list)- 1) 
    and acc = []  in
    for i = 1 to n do 
        (List.nth list (Random.int l) ) :: acc  (* Line 447 *)
    done;
    acc
;;
Run Code Online (Sandbox Code Playgroud)

当我加载包含此代码的文件时,我收到以下错误

File "all_code.ml", line 447, characters 2-40:
Warning 10: this expression should have type unit.
val random_extract : 'a list -> int -> 'b list = <fun>
Run Code Online (Sandbox Code Playgroud)

两个问题,问题1:这个警告意味着什么.

其次,当我运行这个函数时,我没有得到预期的列表,但是一个空列表.

问题2:如何从for循环中获取acc的值

ocaml

4
推荐指数
2
解决办法
4708
查看次数

Ocaml函数将元组转换为列表

我有一个(int*string)元组,我想将其转换为列表.元组的形式为(N,E),其中N是元素E的出现次数.函数应该返回一个列表,其中包含N个出现的E.示例如下.让我们假设这个函数叫做tuple_decode.

tuple_decode (1, "A") -> ["A"]
tuple_decode (2,"B") -> ["B";"B"]
tuple_decode (4,"C") - > ["C";"C";"C";"C"]
Run Code Online (Sandbox Code Playgroud)

tuple_decode函数如下

let tuple_decode acc (n,elem)   = 
let add_one_elem i = 
    match i  with
           0 -> acc
         | i -> elem :: acc ; add_one_elem (i-1)  (* Line 184 *)
in
add_one_elem n 
;;
Run Code Online (Sandbox Code Playgroud)

当我尝试编译此函数时,我收到以下错误.

File "all_code.ml", line 184, characters 11-22:
Warning 10: this expression should have type unit.
File "all_code.ml", line 184, characters 25-37:
Error: Unbound value add_one_elem
Run Code Online (Sandbox Code Playgroud)

有人可以帮我弄清楚为什么我会收到此错误并发出警告.

问候普纳特

ocaml list

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

标签 统计

ocaml ×3

binary-tree ×1

functional-programming ×1

list ×1

tree ×1