4

ミランダとのコーディングに問題があります関数型プログラミングの初心者なので、簡単な間違いをしなければ私を強く叩いてください。

とにかく、12行目でunifyin char with charに問題があるとエラーが発生します。私の考えは、単語のリストと一緒に追加されたファイルからの別のリストの両方になる辞書でフィルタリングすることによって、何かが正しく綴られているかどうかを確認することです

これは私の12行目です

= [filter (= typed) ((read file) ++ dictionary)]

これがこれまでの私のプログラムの残りの部分です

filename == [char]
word  == [ char ]
dictionary :: [ word ]



spell:: filename -> filename -> [ char ]
look:: word -> filename ->[[[ char ]]]


look typed file
= [filter (= typed) ((read file) ++ dictionary)]

dictionary =
["aardvark","bell","camp","dictionary","editor","file","ground",
"grounds","help","intelligent","joint","kettle","light","memory",
"nettle","orange","quite","research","standard","terminal",
"umbrella","violin","water","xenon","yellow","zoo","aaa","abb",
"acc","add","aee"]

誰かが私が間違っていた場所を指摘できますか?

4

1 に答える 1

3

私は Miranda を使ったことはありませんが、Haskell を使ったことがあるので、文字列と文字列のリストを追加しようとしていることが問題のようです。++ただし、同じタイプの 2 つのリストが必要だと思います (Haskell のように):

(++) :: [a] -> [a] -> [a]

しかしread file、タイプ[char]は であり、辞書はタイプ[[char]]です。

これらを型シグネチャに代入しようとする++と、型エラーが発生します。

(++) :: [char] -> [[char]] -> ?? -- type error!!

(read file)に追加する前に単語に分割したい場合がありますdictionary。次に、に追加[[char]]しますが[[char]]、これは問題なく機能します。

私は Miranda について何も知らないことに注意してください。この回答は、あなたのコード、あなたが与えたエラー メッセージ、および Haskell での私の経験 (私は似たような間違いをたくさん犯してきました) に基づいています。

于 2011-10-03T18:55:58.737 に答える