いくつかのプログラミング言語 (JavaScript、Python、Ruby など) では、リストをそれ自体の中に配置することができます。これは、リストを使用して無限に詳細なフラクタルを表す場合に役立ちます。ただし、Haskell でこれを実行しようとしましたが、期待どおりに動作しませんでした。
--aList!!0!!0!!1 should be 1, since aList is recursively defined: the first element of aList is aList.
main = putStrLn $ show $ aList!!0!!0!!1
aList = [aList, 1]
を出力する代わりに1
、プログラムは次のコンパイラ エラーを生成しました。
[1 of 1] Compiling Main ( prog.hs, prog.o )
prog.hs:3:12:
Occurs check: cannot construct the infinite type: t0 = [t0]
In the expression: aList
In the expression: [aList, 1]
In an equation for `aList': aList = [aList, 1]
ここでやろうとしているように、リストを Haskell の内部に配置することは可能ですか?