【发布时间】:2014-12-30 16:53:04
【问题描述】:
fun sample(list_of_str_lists, s) =
case list_of_str_lists of
[] => []
| x::[] => case (all_except_option(s, x)) of
SOME lst => lst
| NONE => []
| x::xs' => case (all_except_option(s, x)) of
SOME lst => lst @ sample(xs', s)
| NONE => [] @ sample(xs', s)
如果该列表中有匹配的字符串(同样,不包括匹配的字符串),它使用一个辅助函数来获取字符串列表并在list option 中返回该列表中的所有元素。因此,辅助函数将获取一个列表["a", "b", "c"] 和一个字符串"a",如果它匹配"a",将返回一个包含["b", “c”] 的选项。
我的问题出在最后一个模式匹配分支的sample 中。它抛出错误
earlier rule(s): 'Z list option -> 'Z list
this rule: string list list -> string list
in rule:
:: (x,xs') =>
(case (all_except_option (s,x))
of SOME lst => lst @ sample <exp>
| NONE => nil @ sample <exp>
但我不明白为什么,因为我尝试匹配的模式调用了SOME lst,但它却将其描述为string list list。怎么回事?
【问题讨论】:
标签: pattern-matching sml