数nを取り、その数の無限リストをすべての数の累乗に返す関数「累乗」を作成する必要があります。
powers 2 = 2,4,8,16,32......
言語の非常に特定のサブセットを使用してこれを行う必要があります。ここで使用できる組み込み関数は、div、mod、even、odd、head、tail、not、null、length、reverse、elem、map、filter、foldr、sumです。 、product、take、drop、takewhile、dropWhile、zipWithおよびfrom。
サブセットにも^演算子はありません。
さらに重要な制約がいくつかあります。
- コードは80文字を超える1行を超えてはなりません
- 「ヘルパー関数」は許可されていません。つまり、この定義内で使用する別の関数を作成することはできません。
これまでのところ、私の考えはこれらの線に沿っています:
powers = \n -> map (\x -> "some function to get n to the power of x") (from 1)
しかし、ヘルパー関数なしでこれを実行する関数を取得する方法を理解できません。
たとえば、数値xの無限リストを返す関数inflistを使用する場合は、次のようにすることができます。
powers = \n -> map (\x -> product(take x (inflist n))) (from 1)
でも、その機能が使えなかったので、こんなことはできません。
表記が通常のhaskellと異なる場合は申し訳ありませんが、この表記を使用する非常に厳密なコアhaskellサブセットです。