次のコードを試しましたが、タイプエラーが発生しました。Haskellでの自己申告機能の作成方法を教えてください。
sa f = f f
• Occurs check: cannot construct the infinite type: t ~ t -> t1 • In the first argument of ‘f’, namely ‘f’ In the expression: f f In an equation for ‘sa’: sa f = f f • Relevant bindings include f :: t -> t1 (bound at fp-through-lambda-calculus-michaelson.hs:9:4) sa :: (t -> t1) -> t1 (bound at fp-through-lambda-calculus-michaelson.hs:9:1)
「sa」にはどのようなタイプがあると思いますか?ハスケルのすべての用語は型を持たなければならないことを忘れないでください。また、どの問題を解決しようとしていますか? – Alec
@Alec分かりませんが、機能をとることができる機能が必要ですか?私はラムダ計算を学んでいて、ハスケルでそれを表現する方法を知りました。私はハスケルがそれぞれの例をチェックするのがいいと思っていましたが、私はすぐに立ち往生しました。たぶんLispやSchemeがこの目的のために簡単かもしれません。 –
あなたはどの言語を使うのかは問題ではありません。型付きラムダ計算でこの関数を構築し、どの型を持つべきか考えてみてください。私たちは似ていますが、無限のタイプは構築できません。 – Euge