gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 17:58:08 25 4
gpt4 key购买 nike

我有以下 list :

["A";"AA";"ABC";"BCD";"B";"C"]

我从列表中随机提取一个元素。但是我提取的元素的大小应该是 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)))) ;;

如果从列表中随机选出长度为 3 的字符串,则此方法工作正常。

但是如果拾取长度小于 3 的字符串,程序不会终止。
我正在尝试进行递归调用,以便不断接收新代码,直到我们得到长度 = 3 之一。

我无法弄清楚为什么这不会终止。打印语句没有任何输出。

最佳答案

你可能想写的是

 let rec code list =
let n = Random.int (List.length list) in
let s = List.nth list in
if String.length s < 3 then code list else s

请注意,根据列表的大小和大小大于 3 的字符串数量,您可能希望直接处理只有大于 3 的字符串的列表:
let code list =
let list = List.filter (fun s -> String.length s >= 3) list in
match list with
| [] -> raise Not_found
| _ -> List.nth list (Random.int (List.length list))

第二个函数更好,因为它总是终止,特别是当没有大于 3 的字符串时。

关于random - 按长度过滤列表中的元素 - Ocaml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4300885/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com