このまえ何とか実験でOCamlを使ってコンパイラやインタプリタを実装したので、それを真似てPerl6で似たようなことをやってみようと思います。 実験ではパーザによってヴァリアント型に落とし込まれた命令列をパターンマッチによって分解しながら実行していくという方針だったのですが、Perl6にはヴァリアント型のようなデータ構造も、パターンマッチもありません。しかし、「似たような」という程度のレベルなら実現する方法がありますので、今回はそれを紹介したいと思います。 代数的データ構造 おそらくPerl6のような型のゆるい言語では、OCamlのヴァリアント型のような構造を格好良くバラすというのは難しいと思います。Perl6的にはおそらくRoleを使って実現するとスマートなのでしょうが、今回は話を簡単にするため、リストを使うことにします。 私の理解では、パターンマッチというのは 構造によって処理を分岐し
![パターンマッチもどき - Qiita](https://cdn-ak-scissors.b.st-hatena.com/image/square/b4c3c1da3b1fbb9e60d73f56ba75b778eb67e74d/height=288;version=1;width=512/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Fadvent-calendar-ogp-background-f625e957b80c4bd8dd47b724be996090.jpg%3Fixlib%3Drb-4.0.0%26w%3D1200%26mark64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTkxNiZoPTMzNiZ0eHQ9JUUzJTgzJTkxJUUzJTgyJUJGJUUzJTgzJUJDJUUzJTgzJUIzJUUzJTgzJTlFJUUzJTgzJTgzJUUzJTgzJTgxJUUzJTgyJTgyJUUzJTgxJUE5JUUzJTgxJThEJnR4dC1jb2xvcj0lMjMzQTNDM0MmdHh0LWZvbnQ9SGlyYWdpbm8lMjBTYW5zJTIwVzYmdHh0LXNpemU9NTYmdHh0LWNsaXA9ZWxsaXBzaXMmdHh0LWFsaWduPWxlZnQlMkNtaWRkbGUmcz1iNDIxMWI4NDljMWZkYWEyMGUyYTkxNzY5MDU4ZTJlMQ%26mark-x%3D142%26mark-y%3D151%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTYxNiZ0eHQ9JTQwVmllbm9zTm90ZXMmdHh0LWNvbG9yPSUyMzNBM0MzQyZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtYWxpZ249bGVmdCUyQ3RvcCZzPWI4OTI3ZDM1NmIzMzI5NWViZWFjZjhhOWRlMzMzMzhh%26blend-x%3D142%26blend-y%3D491%26blend-mode%3Dnormal%26s%3D7f153bf77bce4c56674b677697797282)