基本的な文法・機能(案)LISPにはしたくないまずLISPは素晴らしい言語である。シンプルな構文だけで構成されているのに、一通りのことは全部できる。いうか他の言語よりもいろんなことがうまくできる。LISPは読みにくい。私にとっては直感的ではない。LISPに近い機能を持ちつつ、でもC言語に近い記法を持つような、そんな言語にしたい。いうなれば「受け入れ可能なLISP」を目指す。Rubyも似たような発想に基づいていると聞いたことがある。はただの文字列を渡していることになる。ifやwhileは実は関数になっていて、渡された文字列をevalで実行するかどうかを決めている。構造体は配列の値の前にメンバ名を書く。name:"kawai"]これでg.abcは123になるし、g.defは456になるし、g.nameは"kawai"になる。g["abc"]というようにしてアクセスすることもできる。配列をコピーした場合、完全なdeep-copyになる。C言語では配列名はポインタを意味するが、Essenでは配列名は配列の全内容を意味する。このあとでcを上書きしたり消したりしてもhには全く影響しない配列同士を比較したとき、完全なdeep-compareになる。中身まで完全に同一であるかどうかをチェックする。違うところがあれば等しくない。内容が一致しているかどうかをチェックするのは非常に簡単である。Essenではすべてのオブジェクトに何らかの大小関係を定義する。同じ型同士なら、比較結果は一般に期待されているものと同じになる。違う型なら型の序列に応じて決まる。配列オブジェクトと同士を比較することもできるし、構造体オブジェクトを比較することもできる。これは大小関係そのものに意味があるかないかというよりも、とにかくすべてのオブジェクトを比較可能にしてソートできるようにすることで、いろいろと便利なケースがあるのではないかというアイデアに由来する。みたいなとき、a[i]が最大となるiを求められるようにしたい。a[i]=3となるiを求められるようにしたい。逆引きができるようにしたい。これをどのような記法であらわせばよいか、まだアイデアがない。b[0]=1のときに、aとbを異なるものとして扱おうと思っていた(つまり代入順序が違うと違うものとみなされた)。それは便利そうじゃないのでやめた(まあ当たり前だけど)。現在の案では、代入順序は関係なく、すべてのメンバが同じ値であれば等しいとする。代入順序に関する情報はインデックスでソートすることによりすぐに失われる。