4

そのため、1番目の文字とペアを見つけて2番目の文字を返す関数を作成する必要があります。

私は実際に1つの答えを見つけましたが、マップ機能を使用していて、それを取得できませんでした。

      lookUp :: Char -> [(Char, Char)] -> Char
      lookUp x [] = x
      lookUp x ( ( st,nd ): rst) | st == x = nd
                   | otherwise = lookUp x rst

そして、私はこのメッセージを受け取ります:

No instance for (Show ([(Char, Char)] -> Char))
arising from a use of `print'
 Possible fix:
  add an instance declaration for (Show ([(Char, Char
  In a stmt of an interactive GHCi command: print it
4

2 に答える 2

8

あなたのコードは大丈夫です、あなたはただghciプロンプトですべての引数を提供する必要があります、例えば

lookUp 'c' [('b','n'), ('c','q')]

'q'を与える​​必要があります。

機能が表示できないと文句を言っています。->が含まれているもののShowインスタンスがないと表示されるときはいつでも、関数を表示できないと文句を言います。一部のデータで関数を使用した結果のみを表示できます。

すべてではありませんが一部のデータを与えると、Haskellはそれを次の引数を取る新しい関数として解釈します。

lookUp 'c'

文字のペアのリストを取得し、文字を提供する関数です。それはそれが見せようとしていたものですが、できませんでした。

ちなみに、「インスタンスがありません...」というエラーが発生するたびに、引数に何か問題があったためです。一部を見逃し、順序を間違えたためです。コンパイラは、インスタンスの追加を提案することで役立つように努めていますが、おそらく、書き込みタイプの引数が正しい順序で指定されていることを確認する必要があります。

Haskellを楽しんでください!

于 2012-10-10T01:02:45.783 に答える
5

ghciで次のように入力したようです。

*Main> lookUp 'c'

のような表現lookUp 'c'は、関数の部分評価/カレー形式ですlookUp。タイプは次のとおりです。

*Main> :t lookUp 'c'
lookUp 'c' :: [(Char, Char)] -> Char

これは、ghciがShowインスタンスがないと言っている正確なタイプです。

関数をテストするには、必ず両方xCharペアのリストを指定してください。

*Main> lookUp 'c' [ ('a','A'), ('b','B'), ('c','C') ]
'C'
于 2012-10-10T01:01:38.683 に答える