Haskellでグローバル変数を使用することは嫌われていると私は確信しているので。とにかく次のことを達成できるのだろうか?
-- list has elements that are odd
listHasOdd :: [Integer] -> Bool
-- list has elements that are even
listHasEven :: [Integer] -> Bool
--list has a length > 5
longList :: [Integer] -> Bool
-- Maps the function to a [Bool]
-- This function cannot be modified to fix the problem.
checkList :: [Integer] -> [Bool]
checkList xs = map (\ y -> y xs) listChecker
where listChecker = [listHasOdd, listHasEven, longList]
とにかく、そのうちの1つだけがtrueを返すようにすることができますか?
たとえば、[1,2,3,5]の場合、listHasOddだけが[True、False、False]であるTrueを返すようにします。(上から下に評価)。
別の例、[2,4,6,8,10,12,14]の場合、戻り値は[False、True、False]である必要があります。
つまり、checkList [1,2,3,5]は[True、False、False]を返し、checkList [2,4,6,8,10,12,14]は[False、True、False]を返します。
**最後の関数は到達不能であるため、私の例では常にFalseになります。
前のものがそうであるかどうかを確認するためにifステートメントを実行できることは知っていますが、それはTrue
かなりばかげた考えのようです。それとも実際にそれを行う方法ですか?(Haskellが前の関数の結果を「記憶」していることを考慮すると)