OCAML:将列表中的每个字符串转换为字符串列表

问题描述

我有两个功能一个

let make_row delim str = List.map String.trim (Str.split (Str.regexp delim) str)

一个

let rec table_of_stringlist delim rlist = match rlist with
| h::[]-> make_row delim h
| h::t -> table_of_stringlist delim (make_row delim h)::t)

但是第二个给我带来麻烦。我试图使它本质上是table_of_stringlist d [r1; r2; ...; rN]应该评估为[(make_row d r1); (make_row d r2); ...; (make_row d rN)]。值d是定界符,因此例如 table_of_stringlist“ |” [“ a | b | c”; “ d | e”] 应该评估为 [[“ a”;“ b”;“ c”]; [“ d”;“ e”]]。我对如何在第二个函数中编写匹配用例感到困惑。任何帮助都会很棒。

解决方法

构建时,您将希望沿递归函数传递新列表(表格),一旦到达rlist的末尾,就返回该新列表

let rec table_of_stringlist delim rlist table = match rlist with
| [] -> table
| h::t->
    let new_row = make_row delim h in
    table_of_stringlist delim t (table @ [new_row])

第一次调用时,将空白列表作为table传递。

注意:我并未实际测试上面的摘录,因此它在语法上可能不正确,但是应该接近您的需求。