トップ «前の日記(2011-07-31) 最新 次の日記(2011-08-07)» 編集

Route 477



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だと円マークになる)

 :-/ \-:
 :-\ /-:
本日のツッコミ(全2件) [ツッコミを入れる]
(2011-08-20 12:56)

影ながら応援してます。

yhara (2011-09-01 03:14)

おお、ありがとうございます。もうちょっと詰めるかなぁ。