-1

SML初心者です。簡単なことですが、何時間もかかりましたが、解決できません。

文字列のリストを取得し、すべての文字列とリストを反転する必要があります。メインの外で複数の関数を定義せずにすべてを行います。例 ["stack","overflow","nice"] は ["ecin","wolfrevo","kcats"] を返します

fun oppositelist(l)=foldl (op::) nil (map ((fn(x)=>(implode o rev o explode)(x)), l));

エラーメッセージは次のとおりです。

Error: operator and operand don't agree [tycon mismatch]
  operator domain: 'Z -> 'Y
  operand:         (string -> string) * 'X
  in expression:
    map ((fn x => <exp> <exp>),l)

方法が間違っている場合は、すべてを解決しないでください。ほのめかす。宿題の質問です。

ありがとうございました。

4

1 に答える 1

1

SML関数mapカレーです。fリストのすべての要素に関数をマップするにはl、を記述する必要がありますmap f l。あなたが書いたのはmap (f,l)、「関数をマップする(f,l)...後で決定される何か」を意味します。(f,l)は関数ではないため、コンパイラはあなたに不平を言っています('Z -> 'Y); これは、関数とリスト((string -> string) * 'X)で構成されるタプルです。

私はあなたの解決策をこれ以上詳しく調べていませんが、あなたがこの答えに応えてコメントし、私に頼んだら、私はおそらくそうするでしょう。:)

編集:ああ、そして、書くことは長い間書く方法であるのと同じ理由で、それ(fn(x)=>(implode o rev o explode)(x))はただ長い間長い書き方です。(implode o rev o explode)(fn(x)=>f(x))f

于 2012-10-04T22:08:25.687 に答える