Essenの開発メモ#0003
基本的な文法・機能(案)
- LISPにはしたくない
- まずLISPは素晴らしい言語である。シンプルな構文だけで構成されているのに、一通りのことは全部できる。というか他の言語よりもいろんなことがうまくできる。
- しかし、LISPは読みにくい。かっこが多すぎる。私にとっては直感的ではない。だからLISPに近い機能を持ちつつ、でもC言語に近い記法を持つような、そんな言語にしたい。
- いうなれば「受け入れ可能なLISP」を目指す。
- Rubyも似たような発想に基づいていると聞いたことがある。
- 配列の要素へのアクセスはC言語みたいに角かっこを使う
e = c[2] // c(2) でもよい
- 中かっこは文字列になる(文脈情報も内部では持っていて、それを使って変数スコープを解決する)
f = { a = b - 1 }
- ただの文字列になるので、ifやwhileの { } はただの文字列を渡していることになる。ifやwhileは実は関数になっていて、渡された文字列をevalで実行するかどうかを決めている。
- 配列同士を比較したとき、完全なdeep-compareになる。つまり中身まで完全に同一であるかどうかをチェックする。少しでも違うところがあれば等しくない。だから内容が一致しているかどうかをチェックするのは非常に簡単である。
- Essenではすべてのオブジェクトに何らかの大小関係を定義する。同じ型同士なら、比較結果は一般に期待されているものと同じになる。違う型なら型の序列に応じて決まる。配列オブジェクトと同士を比較することもできるし、構造体オブジェクトを比較することもできる。
- これは大小関係そのものに意味があるかないかというよりも、とにかくすべてのオブジェクトを比較可能にしてソートできるようにすることで、いろいろと便利なケースがあるのではないかというアイデアに由来する。
- a[0] = 1 a[1] = 3 a[2] = 7 みたいなとき、a[i]が最大となるiを求められるようにしたい。またa[i]=3となるiを求められるようにしたい。つまり逆引きができるようにしたい。機能は簡単にできる。ただこれをどのような記法であらわせばよいか、まだアイデアがない。
こめんと欄
|