按长度过滤列表中的元素 - Ocaml

JJu*_*ior 5 random ocaml

我有以下列表:

["A";"AA";"ABC";"BCD";"B";"C"]
Run Code Online (Sandbox Code Playgroud)

我从列表中随机提取一个元素.但是我提取的元素应该只有3不小于3.

我想这样做如下:

let randomnum = (Random.int(List.length (list)));;
let rec code c =
    if (String.length c) = 3 then c
    else (code ((List.nth (list) (randomnum)))) ;;
print_string (code ( (List.nth (list) (randomnum)))) ;;
Run Code Online (Sandbox Code Playgroud)

如果从列表中随机挑选一个长度为3的字符串,这可以正常工作.

但是如果拾取长度<3的字符串,则程序不会终止.我正在尝试进行递归调用,以便新代码不断被提取,直到我们得到一个length = 3.

我无法弄清楚为什么这不会终止.print语句没有输出任何内容.

Bri*_*ian 3

您只能选择一次随机数。假设你选择 5。你就不断地递归 5。您需要获得一个新的随机数。