由于String.concat,ocaml中出现语法错误

由于String.concat,ocaml中出现语法错误,ocaml,Ocaml,假设我有一个integer类型的列表[blah;blah;blah;…],我不知道lis的大小,我希望模式匹配,而不是打印列表的第一个元素。有没有办法在不使用if-else或语法错误的情况下实现这一点? 因为我要做的就是解析一个看起来像/path/to/blah/blah//file.c的文件 并且只打印路径/到/等等 例如,可以这样做吗 let out x = Printf.printf " %s \n" x let _ = try while true do

假设我有一个integer类型的列表[blah;blah;blah;…],我不知道lis的大小,我希望模式匹配,而不是打印列表的第一个元素。有没有办法在不使用if-else或语法错误的情况下实现这一点? 因为我要做的就是解析一个看起来像/path/to/blah/blah//file.c的文件 并且只打印路径/到/等等

例如,可以这样做吗

let out x = Printf.printf " %s \n" x 
let _ = try
      while true do
           let line = input_line stdin in 
           ...
           let rec f (xpath: string list) : ( string list ) =
                begin match  Str.split (Str.regexp "/") xpath  with 
                         | _::rest -> out (String.concat "/" _::xpath);
                         | _ -> ()
        end
但是如果我这样做,我会在String.concat行出现语法错误

String.concat”/“\::xpath
没有任何意义,因为
\
是模式而不是值<代码>\uu可用于模式匹配的左侧部分,但不能用于右侧部分

您要做的是
String.concat”/“rest


即使
\\xpath
是正确的,
String.concat/“\\\xpath
将被解释为
(String.concat/):xpath
,而您希望它被解释为
String.concat/”(\\code::xpath)

对不起,同时我已经用rest替换了xpath,但仍然不起作用!!我并不是故意问两次这个问题的:我们的代码不完整。函数
f
不是递归使用的,不会产生值,只会产生副作用。函数
f
的范围未关闭,且该函数根本未使用。循环未关闭(无
done
关键字)。异常保护未关闭,未命中“catch”分支(没有对应的带有关键字的
)。