我正在编写一个递归的OCaml函数,用于连接字符串列表中的字符串,并通过分隔符在最后一项上不放置分隔符。但我遇到了一些问题。我知道有一个string.concat函数,但我更愿意不使用它,以便了解OCaml如何在幕后执行这些操作。以下是我目前的代码:
let rec join (separator: string) (l: string list) : string =
begin match l with
| []-> ""
| [hd]-> hd
| hd::tl-> if hd != "" then hd^separator else .....
end
我正在使用模式匹配来匹配字符串列表l并涵盖三种情况:情况1,如果字符串列表为空,则不返回任何内容;情况2,如果列表中没有尾部,则仅返回头部。尾部三执行连接操作,同时在连接其他项目时递归调用join函数,并在它们之间用字符串分隔符连接。然而,我不确定如何在同时递归尾部和遵守OCaml需要每个语句都求值为表达式的情况下实现这一点。这在C或Java中是一个微不足道的问题,但我无法解决它,非常感谢任何帮助或指针。
join separator tl
是合法的调用,并且它通过递归假设返回一个字符串类型的值。 - Jeffrey Scofield