0

私はこの関数をSMLで書いています。可能な名のバリエーション(私の名前はVictoriaなので、V、Vic、Vickyなど)のリストを取得し、{altname1、middle、last}、{alt2、middle、last}のレコードを作成することになっています。

これが私のコードです:

fun similar_names (substits:, name) = 
    let 
    val {first=n1, second=n2, third=n3} = name
    fun name_constructor (altnames:string list, acc) =
        case altnames of 
        [] => acc
         |  a::aa  => {first=a, second=n2, third=n3}::acc
    in 
    name_constructor( get_substitutions2(substits, n1),name)

    end

get_substitutions2は、名の可能なすべてのバリエーションのリスト(つまり、文字列リスト)を提供するだけで、機能します。

私が得ているエラーは次のとおりです。

a02.sml:65.2-65.58 Error: operator and operand don't agree [tycon mismatch]
  operator domain: string list * {first:string, second:'Z, third:'Y} list
  operand:         string list * {first:string, second:'Z, third:'Y}
  in expression:
    name_constructor (get_substitutions2 (substits,n1),name)

なぜそれがレコードリストとレコードだけの間を行き来するのか理解できません。手伝ってくれる?

4

1 に答える 1

5

nameは1つのレコードだけですが、リストであることがname_constructor期待accされます(あなたが言うので::acc)。
試す

name_constructor(get_substitutions2(substits, n1), [name])
于 2013-02-01T16:05:41.833 に答える