2011-08-06
■ [esolang] プログラミング言語Smile (draft 1)
講演のために新しい言語を考え中。 処理系は当日作るつもりなんでまだないです。
決まってないことが多いので求む・識者の意見。
プログラミング言語Smile
- dequeベース
- deque→一つの命令(例:add)に対し、add_leftとadd_rightを作りたい
- 顔文字(英語圏の)なら自然にleft/rightを定義できる
- (+: add_left
- :+) add_right
数値リテラル
A案 (大きな数字を書いたときに見づらい?)
-2 (--: -1 (-: 0 (: :) 1 :-) 2 :--)
B案 (正のリテラルが左向きなのがちょっと気持ち悪い?)
-2 :-2 -1 :-1 0 :-0 0-: 1 1-: 2 2-:
C案 (顔文字としてちょっと難がある?)
-2 (-2 -1 (-1 0 (-0 0-) 1 1-) 2 2-)
演算
(+: :+) add (-; ;-) sub (*: :*) mul (-/ /-) div (^% %^) mod
(-| |-) or (-& &-) and (^: :^) xor
deque操作
rotate_rightは、右端の値をpopして左端にpushする。 これがあることで 「上からn番目を取り出す」みたいな操作が書けたり、一時的に値を 「反対側」に退避させたりできる。
:-s s-: swap :") (": dup >-: :-< push <-: :-> pop
o-8 8-o rotate
:-O O-: putn (number -> number) :-o o-: putc (number -> char) :-i i-: in (char -> number) :-I I-: in (number)
命令が引数をとれるようにするかは要検討(rotate_right 3 とか)。
コメント
これはかなり気に入ってるw
:-x single-line comment :-X X-: multi-line comment
制御構造
制御構造に関しては、一方向だけ用意する予定。 つまりdequeの「右端」から値を取り出して、それが0かどうかで判定を行う。
{-: :-| :-} if then endif
あるいは「bool a b if」という語順も考えられるが…
[-: :-] loop
余り
この4つは綺麗に対称なんだけど用途が思いつかない(そしてwindowsだと円マークになる)
:-/ \-: :-\ /-:
影ながら応援してます。
おお、ありがとうございます。もうちょっと詰めるかなぁ。