【问题标题】:ERROR: String list list instead of string list错误:字符串列表列表而不是字符串列表
【发布时间】:2013-01-15 00:28:05
【问题描述】:

我有这个函数可以生成一个字符串列表:

fun get_substitutions1 ([],_) = []
| get_substitutions1 (x::xs,s) = case all_except_option(s,x) of
    NONE     => []  @get_substitutions1(xs,s)
  | SOME lst => lst @get_substitutions1(xs,s)

这个函数接受一个字符串列表和一个类型:

fun similar_names(slist,full_name:{first:string,middle:string,last:string})=
let
fun aux(slist,acc)=
case full_name of
{first=a,middle=b,last=c} => case get_substitutions1(slist,a) of
[] => full_name::acc
| x::xs'  => full_name::  aux(xs',{first=x,middle=b,last=c}::acc)

in aux(slist,[])
end

我得到一个错误:

错误:运算符和操作数不一致。 运算符域:字符串列表列表 * {first:string, last:string, middle:string} 列表 操作数:字符串列表 * {first:string, last:string, middle:string} 列表 表达: 辅助 (xs',{first=x,middle=b,last=c}::acc)

还有其他方法吗?

【问题讨论】:

    标签: sml


    【解决方案1】:

    首先,您可能不想缩进代码以使其可读。

    很明显为什么你会得到你所做的错误。函数

    fun get_substitutions1 ([],_) = []
      | get_substitutions1 (x::xs,s) =
        case all_except_option(s,x) of
          NONE => []@get_substitutions1(xs,s)
        | SOME lst => lst @get_substitutions1(xs,s)
    

    有类型

    val get_substitutions1 = fn : ''a list list * ''a -> ''a list
    

    并且您正尝试在内部大小写表达式中使用此函数的结果,在该表达式中,您将返回列表的尾部(类型 'a list)并在递归函数调用中使用它们。

    fun similar_names(slist,full_name:{first:string,middle:string,last:string})=
        let
          fun aux(slist,acc)=
              case full_name of
                {first=a,middle=b,last=c} =>
                case get_substitutions1(slist,a) of
                  [] => full_name::acc
                | x::xs'  => full_name::  aux(xs',{first=x,middle=b,last=c}::acc)
        in aux(slist,[])
        end
    

    但是,由于get_substitutions1 中使用了aux 的第一个参数,因此该参数必须是'a list list 类型,但您在递归调用中使用的xs' 仅属于'a list 类型。

    【讨论】:

    • 我知道 get_substitutions1 结果是一个字符串列表。但是我的辅助函数需要一个字符串列表列表。我很困惑,因为我想要使用字符串列表结果进行递归。你能帮帮我吗?
    • 如果你知道,那你为什么不修呢?也许你应该重申你的问题更清楚一点,关于你不理解的真正原因
    • 我唯一可以多说的是,您似乎以错误的方式使用get_substitutions1 的输入或结果。
    • 我找不到其他方法来做我想做的事。我认为我的逻辑是正确的,但我正在失去一些东西。至少,这是显而易见的吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-17
    • 2018-07-21
    • 1970-01-01
    • 1970-01-01
    • 2015-06-11
    • 2018-08-25
    相关资源
    最近更新 更多