ニコ動で動作するLispインタプリタ書いたよ
どうもzickです。
2/1に見た夢をきっかけに触り始めたニコスクリプト(正確にはニワン語というらしい?)ですが、
しばらく触っていないうちに色々と機能が追加されており、なんと手続きが作れるようになっていました。
知らない機能を色々触っていたら、いつの間にかLispインタプリタが出来上がっていました。
2/1に見た夢が4ヶ月ほどを経て正夢になってしまいました。
関係ありませんが、少し前に単位が足りなくて4年生になれない夢を見ました。
こちらの夢は正夢にならないことを祈るばかりです。
—
*ニワン語メモ*
大体のことはニコニコ動画まとめwikiを見れば分かります。
(Lispインタプリタを半分くらい作ってからここの存在に気づきました。もっと速くググればよかったorz)
とりあえず、ここに載っていないような細かい事項を書いておきます。
[1行の制限]
スクリプトは1行に1024文字まで書くことができます(以前はもっと短かった気がします)。
手続きを作って処理を分割できるので、この制限はあまり問題ないでしょう。
[文字列]
文字列に str[n] のように添え字をつけるとn文字目(0から始まる)の文字が得られます。
一見C言語のようですが、正確にはn文字目の文字のみから成る文字列が得られます。
その文字列自身ではなく恐らくコピーが得られるので文字列はimmutableです。
また、文字列のメソッドindexOfは以前は1引数の関数でしたが、
いつのまにか2引数の関数になってました。詳しくはまとめwiki参照。
[配列]
arr=[1,2,3,4,5] のように大括弧で囲むと配列を作ることが出来ます。
大きな配列を作りたかったら要素を沢山書いたらいいのですが、
要素数を100個ほどにすると動作しません(50個では動作しました)。
配列の要素に配列を入れることができるので、大きな配列が必要な場合はこれを使うのも手です。
(push, shiftを使って動的に配列を大きくした場合どうなるかは未確認です)
[手続き]
再帰呼び出しが可能です。その場合も引数$nが壊れることはありません。
これでループが書けます。恐ろしく便利です。
ちょwww今度はニコスクリプトかwww
ランキングに見かけたら釣りかと思ったが・・・
凄い! としか言いようがない!
まさかニコスクリプトがもうチューリングコンプリートになったとは・・・ま、letrecやlambdaがないとまだチューリングコンプリートとは言えないんだけど。
インタープリタの詳細が凄く気になりますので説明的なブログ記事とかと書いてくればうれしいです。
とにかく凄いものを見せてくれてありがとう、そしてお疲れ様でした!
>haru-sさん
正確にはニワン語だとか。
ニコスクリプトは公式サイトが解説をしている「日本語スクリプト」のことで、
解説の少ない「まとも(?)なスクリプト」の方はニワン語だとか。
けど、かつては「ニコスクリプト未公開命令」と呼んでいたし、謎です。
>bd_さん
釣りじゃないです(笑)
ランキングに載っていたとは知りませんでした。
インタプリタの詳細は後ほど書いていこうかと思います。
[…] 以前作ったものがまともに動かなくなってしまいました。 […]