私は最近 Haskell を学び始めたばかりで、より具体的には、関数合成、部分関数、マップ、フィルター、およびセクション化のトピックについてです。演習の 1 つで、twoFilters
関数合成を使用して関数を変更するよう求められます。
いくつかのウィキを読んだことがありますが、.
正しく動作させるのにかなり苦労しています。私が理解しているように、b . a
アルファベット順に関数を実行し、結果を返すことで機能します。つまりx = foo a
、そしてfoo b of x
. ただし、次の2つのフィルター関数を使用していくつかの「バリエーション/可能性」を適用した後、エラーのためにコンパイルできません。
greaterThanOne :: Int -> Bool
greaterThanOne = (>1)
lessThanTen :: Int -> Bool
lessThanTen = (<10)
twoFilters :: [Int] -> [Int]
twoFilters xs= filter lessThanTen (filter greaterThanOne xs)
これらの 2 つは、私が最も自信を持っていた失敗した試みです。
twoFilters xs = filter (lessThanTen . greaterThanOne xs)
twoFilters xs = filter (lessThanTen xs . greaterThanOne xs)
推論のどこが間違っているのでしょうか?