-1

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

例如,可以这样做吗?

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 行出现语法错误!

4

1 回答 1

0

String.concat "/" _::xpath没有任何意义,因为_是模式而不是价值。_可以用在模式匹配的左边部分,但不能用在右边部分。

你想做的是String.concat "/" rest

即使_::xpath是正确的,String.concat "/" _::xpath也会被解释为(String.concat "/" _)::xpath而您希望它被解释为String.concat "/" (_::xpath).

于 2013-06-11T09:19:39.470 回答