我只是想知道什么是XL变量在这里,它没有在任何地方声明?如果字符串不在列表中,此函数返回NONE。否则,返回原始字符串列表,但没有匹配字符串。SML中的模式匹配?
fun same_string(s1 : string, s2 : string) =
s1 = s2
fun all_except_option(s1: string, lst: string list) =
case lst of
[] => NONE
| x::xl => if same_string(s1, x) (* XL HERE ?? *)
then SOME xl
else case all_except_option(s1, xl) of
NONE => NONE
| SOME l => SOME (x::l)
该行*是* xl的声明,就像'x'一样(为什么你对'xl'感到困惑,而不是'x'?)。 – melpomene
哦,还有x。所以我们可以在不使用val的情况下声明这种方式? –
是的,这就是模式匹配的全部内容:您可以测试数据结构所具有的形状,并通过将其绑定到变量来提取子部分。 – melpomene