Quine-relay Advent calendar Day 24: Lazy K

ref: https://github.com/mame/quine-relay

24 日目の今日は、Lazy K を追加しました (コミット) 。100 言語達成! ロゴも新しくなりました。(@hirekoke さんありがとう)

Lazy K は、純粋関数型の難解プログラミング言語です。SKI コンビネータを直接書く系。

Lazy K は入出力をラムダ式エンコードする必要があるので、短いプログラムで長大な文字列を出力するというのはなかなか面倒です。既存研究がありそうな気もしましたが、調べるより自分で考える方が楽しそうだったので考えました。表示すべきバイト列をビット列とみなして、各ビットを k と i で表現することにしました。このビット b を、(b i inc (dbl num)) というように適用すると、b が k だったら (dbl num) に、b が i だったら (inc (dbl num)) になります。これを繰り返せば二進数的に数字を作れます。7 ビットを 1 文字として出力してます。
ただ、単純に ``````

みたいなプログラムにするとインタプリタが segfault してしまったので、やや冗長になりますがバイト単位で区切って適用するような感じのコードにしています。

以上のエンコードを、Kaya で行ってます。思ったより短くきれいにかけて、Kaya いいなーと思った。


ということで、Merry Quine-mas!


Quine-relay Advent calendar はこれで終わりですが、明日、一人反省会の記事を載せる予定です。それは Quine Advent Calendar 2014 の 25 日目の記事を兼ねる予定。さらに「重大発表(笑)」もある予定。