私はFPの経験はあまりなく、もっと精通した人からの重要な洞察を欠いていると思います。私は、小さな、埋め込まれた、機能的で、厳密にそして不変的に型付けされた言語を書いています。ブール演算子の関数の構成
この質問では、私はハスケルのような構文を使用します。
次の署名は、あなたが期待するものですタイプと事前に定義された機能のためのものです:
and :: bool -> bool -> bool -- boolean and
lt :: int -> int -> bool -- less than
gt :: int -> int -> bool -- greater than
len :: list -> int -- list length
私の仕事は、次のシグネチャを持つ式を形成するために、これらの機能(および定数)を構成することです。
(現在)この言語のみをサポート:のλ :: list -> bool
結果は、リストの長さ
1〜99の制約を有するかどうかであります機能のアプリケーションと機能の構成。ラムダ式はなく、高次関数はありません。それの長さは、ブール、その後、0より大きく、「と」の両方の引数を返した場合、and . ((gt 0) . len) :: list -> bool -> bool
これはリストを受け取りチェック:
これは私が得ているどのくらいです。
しかし、今私は立ち往生しています。ここから伝統的な機能的言語でどのように続行しますか?ラムダ/クロージャなしでソリューションを表現する方法はありますか?
私は言語に新しい機能を追加することはできますが、機能が低下していてシンプルである限りです。
ハスケルでは 'f x =((gt 0)len x)&&((lt 100)len x)'と書くことができます。あなたはあなたの言語でそれを受け入れますか? –
「高次関数なし」とはどういう意味ですか? – leftaroundabout
@leftaroundについては、引数として他の関数をとる関数はありません。 – thwd