Elixir では Stream モジュールを使って、遅延評価と無限リストを扱うことができるがそれによりエラトステネスのふるいを、Haskell と同じように無限リストを使った記述ができるか・・・というのが今回の試み。結果としては、カッとなれば、できる。 以下、Stream の解説も交えてお届けする。 Enumerable プロトコルと Enum および Stream Elixir の Enum モジュールには map/2 や filter/2 や zip/2 など、コレクション操作に必要な関数が多数実装されている。以下はそのドキュメントの例である。Functions のところに Enum の関数が列挙されているのが分かる。 ちなみにこのドキュメント閲覧は Dash の画面。自分は主に iOS 開発のドキュメント閲覧によく使っているが、見ての通り Elixir のドキュメント参照にも便利。
![無限リストによるエラトステネスのふるい - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/a2231ad0a177b3ef391ba85abd6d72d48a1348eb/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-9f5428127621718a910c8b63951390ad.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9JUU3JTg0JUExJUU5JTk5JTkwJUUzJTgzJUFBJUUzJTgyJUI5JUUzJTgzJTg4JUUzJTgxJUFCJUUzJTgyJTg4JUUzJTgyJThCJUUzJTgyJUE4JUUzJTgzJUE5JUUzJTgzJTg4JUUzJTgyJUI5JUUzJTgzJTg2JUUzJTgzJThEJUUzJTgyJUI5JUUzJTgxJUFFJUUzJTgxJUI1JUUzJTgyJThCJUUzJTgxJTg0JnR4dC1jb2xvcj0lMjMyMTIxMjEmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LWNsaXA9ZWxsaXBzaXMmdHh0LWFsaWduPWxlZnQlMkN0b3Amcz0wZWY5OGIxMmIwN2YzYWFjZDgxNWRmOWE4NDZhNmUxMQ%26mark-x%3D142%26mark-y%3D112%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQwbmFveWElNDBnaXRodWImdHh0LWNvbG9yPSUyMzIxMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPTBlMmQyYzQzNmVmN2FkOGMyYjIxMGU0NmRiZDMxNzA3%26blend-x%3D142%26blend-y%3D491%26blend-mode%3Dnormal%26s%3Db8eaf8dc3b0132d70d1c568b7ed5dfc1)