我有一个问题,OCaml 认为我的函数的a
和s
参数是unit list
s,但它们必须分别是'a list
和string
。该函数必须输出由给定分隔符分隔的列表元素。
结果必须是一个字符串,输入如下:“This-is-label”
PS我知道match,但是我不能用
let rec function1 a s =
if a = [] then failwith "Empty list" else
if List.tl a = [] then List.hd a else
if List.tl a != [] then List.hd a; s; function1 List.tl a s
;;
function1 ["This"; "is"; "label"] "-";;
您似乎希望这个表达式是一个字符串:
List.hd a; s; function1 List.tl a s
但是,;
运算符的含义是对左侧的表达式求值,然后忽略其值。(如果类型不是单位,它也被认为是错误的形式。)然后计算右边的表达式,它是表达式的值。
所以这个表达式说要评估List.hd a
,然后忘记这个值。然后评估s
,然后忘记值。然后评估递归调用。
所以第一个问题就是把这些东西组装成一个字符串。
该^
运算符连接两个字符串。所以这样的事情更接近你想要的:
List.hd a ^ s ^ function1 (List.tl a) s
请注意,您需要将调用括起来List.tl
。否则它看起来像两个单独的参数function1
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句