如何在ML中找到双引号

时间:2014-03-26 01:32:25

标签: functional-programming ml

我有这个代码,它找到双引号并将这些引号的内部转换为字符串。它设法找到第一个引号但却找不到第二个引号:"这个"会是"这个。我如何得到它我可以使用此函数来查找完整的字符串。

2 个答案:

答案 0 :(得分:1)

也许这太明显了:

if (ch = #"\"") then SOME(String(x ^ "\""))

答案 1 :(得分:1)

我真的不明白你的代码:你在第一次出现引号后返回字符串,但是这个字符串是用你在它之前找到的字符构建的。此外,为什么要返回SOME(Error)而不是NONE

您需要使用布尔变量来了解何时看到第一个引号,并在找到第二个引号时停止。所以我会写这样的东西:

fun parseString x inStr quote =
  case (TextIO.input1 inStr, quote) of
     (NONE, _) => NONE
   | (SOME #"\"", true)  => SOME x
   | (SOME #"\"", false) => parseString x inStr true
   | (SOME ch, true)     => parseString (x ^ (String.str ch)) inStr quote
   | (SOME _ , false)    => parseString x inStr quote;

并使用quote初始化false