GHCiでapplyToIntegers
を使用するmultiplyList
関数を実行しています。私はそれが2でリストを掛けたかった。以下は私が試したものと私が得たエラーです。その下に、便宜上、リストIIからの抜粋があります。multiplyListはどのように動作させるのですか? Haskell ref:https://en.wikibooks.org/wiki/Haskell/Lists_II
リストIIのコードはOKです。私の問題は次のとおりです。コード内のどこに乗数を入れますか?
applyToIntegers
を単独で使用することはできますが、map
を使用して複製することができます。私はmultiplyList
からapplyToIntgers
に接続できません。
これは、私が先月前に聞いたことがなかったHaskellを学んでいる私の最初の投稿です。Haskellの優れたウィキブックスの中から、私は最も美しい高水準プログラミング言語であると言わなければなりませんこれまでに遭遇した。
*Main> :l ods.hs [1 of 1] Compiling Main (ods.hs, interpreted) ods.hs:15:35: error: • Couldn't match expected type ‘Integer -> Integer’ with actual type ‘Integer’ • Possible cause: ‘2 *’ is applied to too many arguments In the first argument of ‘applyToIntegers’, namely ‘((2 *) m)’ In the expression: applyToIntegers ((2 *) m) In an equation for ‘multiplyList’: multiplyList m = applyToIntegers ((2 *) m) Failed, modules loaded: none. Prelude>
https://en.wikibooks.org/w/index.php?title=Haskell/Lists_II&oldid=3242682は、我々は、他の適切な関数を取り、の要素に
与えられた関数を適用する機能が必要になります。applyToIntegers :: (Integer -> Integer) -> [Integer] -> [Integer] applyToIntegers _ [] = [] applyToIntegers f (n:ns) = (f n) : applyToIntegers f ns -- E.g., applyToIntegers (2*) [1..5] = [2,4,6,8,10], also -– map (2*) [1..5] = [2,4,6,8,10] -- Unable to come up with a working example: multiplyList :: Integer -> [Integer] -> [Integer] --multiplyList m = applyToIntegers ((*) m) -- Compiles OK. -- If I try: multiplyList m = applyToIntegers ((2*) m)
私は次の取得しますリスト:
applyToIntegers :: (Integer -> Integer) -> [Integer] -> [Integer] applyToIntegers _ [] = [] applyToIntegers f (n:ns) = (f n) : applyToIntegers f ns
applyToIntegers
を使用すると、Integer -> Integer
関数を使用して、 整数を整数の要素の要素に適用できます。私たちは、このようにmultiplyListを再定義するためにこの一般 機能を使用することができます:1つの以上の引数を(取るために準備ができている新しい 関数を作成するために、単一の最初の引数でmultiplyList :: Integer -> [Integer] -> [Integer] multiplyList m = applyToIntegers ((*) m)
(*)
機能を使用していますれ、このユースケースでは、 与えられたリストの数字から来る)。
あなたの質問に見えるかもしれませんがそのURLをタイトルから削除して実際のクリック可能なリンクとして質問の本文に入れた方が少し良いです。 – dividebyzero
あなたはそこに答えを持っています。エラー状態と同じように、あまりにも多くの引数に '(*)'を適用しました。 'm'を' 2'に置き換えてください。 – AJFarmar