0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Pythonの改良型の新しい言語の提案

Last updated at Posted at 2024-11-02

pythonの改良型の新しい言語の提案

pythonは、ステートメントと式が分かれていて、インデントブロックで区切るので、
eval関数で命令を処理できない。(exec関数で処理できるが、インデントの処理が煩い)
命令も全て式とすれば、eval関数で処理できる美しい言語ができる。
CとLISPとPythonを元にして。
CとLISPとPythonのあいの子の書きやすい平易な記述版と思ってくれればよいです。

自分自身をデータとして取り扱えればなお良い。

デザイン草稿 [

式; :: 式; 式;

a = while b == c { 式; 式; }; /* 実行して値を返す */
a = 'while b == c { 式 };'; /* 文字列 */

関数定義は、
a=def func(x,y) { 式 };

マクロ定義は、
a=mac MACRO(X,Y) { (X+Y)*100 };

クラス定義は、
a=class Player { def __init__(self, x) { self.x = x; def func(y) { 式 }}

whileも、defも、macもclassも値を持つ。

自分自身の参照は、
a = 'a'
a = 'a; b;'

a = 'while { 式 };';
eval(a);でaの実行、値を返す。

}のあとの;は省略可。

a = [ 1 2 3 ]; でvector。リストを扱えると良い。

a = load('filename'); /* 自分自身やファイルをデータとして取り扱う。 */
eval(a);
まとめると、
eval(load('filename'));

a=load('filename') /* aにファイルの内容を格納する */

include('filename'); は eval(load('filename')); と等価。

while b==c { 式; 式; }は最後に評価された式の値
while b==c { 式1; } then 式2;は正常終了した場合式2の値 /* Pythonはループ正常終了時のelseとthenが逆なので */

b==cは式で置き換えられる

{ 式; }は、式;

ブロックは、{}で記述
{ 式1; 式2; 式3; } ブロックの値は最後に評価された式の値。分岐がないと式3の値

例えば、
{ 式1; if 式2 then 式3 else 式4 }の値は、式2が真の場合式3、式2が偽の場合は式4
{ switch 式1 { case 式2: 式3 case 式4: 式5 case 式6: 式7 default: 式8 } } は、
式1と式4が等しい場合、switchもブロックも式5の値

チューリング完全で。
書きやすさと美しさの妥協点。
マクロもひっくり込める。

・動的型付けがよい。動的型付けだとバグが出やすいが、書きやすいので。いやしかし、静的型付けの方がコンパイラを書きやすいし、バグが出にくいので、静的型付けのほうが優秀。

・ネイティブコードコンパイラ付きで。ネイティブコードコンパイラ付きだと、プログラムをデータとして扱う場合と動的型付けをする場合、難しくなるので、中間コードコンパイラでも良いかも知れない。

関数の中で関数定義可にして、クラスの中でクラス定義可にして、マクロの中でマクロ定義可にして。
オブジェクト指向も書けるようにして。

スクリプト言語として複数行にまたがる記述も可能にして。

Pythonみたいに初心者も書きやすく。

内包表記も扱えるようにして。
なるべく使わないが、gotoありで。
インデントブロック区分はなしにして。
式だから、書くフォーマットは自由で。
手続き型、関数型、オブジェクト指向型言語の記述もできるように。

エラー処理、Noneの処理もきれいにして。

] デザイン草稿end

LISPほど美しくはならないが、記法として存在してほしい。
string処理を強力にして、データとしての式を加工しやすくする。

参考:

LISPはストリング処理がちょっと弱いような気がします。LISPは完全です。

これが完全なプログラミング言語の一つのモデルの提案です。

手続き型+関数型+オブジェクト指向型、構造化言語の完成された、もっと良い言語処理系がありそうです。探しています。情報を提供していただければ幸いです。どうもこういうのも既にありそうやねえ。

これでできるらしいけど、Pythonでは余計なものがついている。これは、ストリング処理はどうなるのだろうか。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?