fc2ブログ

LISP風言語

こんにちは。いかろです。
PythonでLISPっぽい言語を作っています。現在は四則演算と表示の機能しかないので言語というのはおごまかしいですが。構文は以下のような感じです。
(print (* (+ 10 2) 2));
これは((10+2)*2)を表示するという内容。ちなみに「hello world!!」は
(print "hello world!!");
という文になります。一行の場合;を省略してもエラーにはなりませんが、つけることをお勧めします。複数行になるとエラーになり、そして一行で完成するプログラムは殆どない。なぜこんなに括弧が多いのかというと全て同一の構文
(func a1 a2 ...)
と表せるから。というのもありますが、ちょっと変形させるだけでPythonのリスト型になり、処理を全部リストの処理として行っているからという理由もあったりw 構文解析だるいからプログラマにPythonにわかる構文で書くことを強要しているわけ。とりあえず、実装しなくちゃいけないのが変数とif 文、できればループかな。変数は辞書型で実装しようかと。変数名と値を結びつけるという意味ではこの方法が一番普通かな。グローバル変数だけしか作れないけど。

みなさんよかったら「はやぶさ2予算増額の嘆願署名」に協力してください。↓
http://www.shomei.tv/project-1562.html
どっかの事業仕分けの誰かさんが科学に対して「2番じゃだめなの?」といってましたが、ダメです。科学は再現性があることが必須なため「2番で同じことができた」では普通として扱われてしまいます。スポーツと違い、新しい発見(新記録)でなければ意味はありません。ハヤブサはイオンエンジン等誰もしたことのない経験を持っていて世界をリードできる水準にあります。ここでハヤブサ2が開発できないとなると日本にとって大きな痛手となる可能性が高いです。つまり、ここで数億円を出すのをためらうとそれ以上の損失が出ることは必須です。

EternalStreamPV公開

どうもお久しぶりです。いかろです。なぜかテスト前になると更新したくなるという。今日はEternalStreamのPVをニコニコに投稿してみました。初投稿なんで緊張...しない。案外あっさりといけるんですね。問題なくうpできたのでよかった。投稿した動画↓


author:いかろ

1ヶ月ぶりです

きっとみんなテストとかで忙しかった。たぶん今年度は高校3年になってしまうので、更新頻度かなり落ちるかと。 
 さて、数BのBASICの素数のリストを作るアルゴリズムがあまりに醜いのでPythonで書き直してみました。計算効率を計ってみた結果計算量がBASICのほうを自己流にアレンジして多少効率よくしても、646桁もの開きがあります。恐ろしい。問題は1~100000までにあるすべての素数を列挙するというもの。教科書の正攻法でいくと,100000!回、掛け算の対象性?を利用して求めても316!回計算が必要。恐ろしい。
Pythonのほうはリスト型で[2]という最初の素数2を入れたリストをまず作ってそれから修正していくという方法をとってみました。言葉じゃ説明しづらいのでソースは↓

n=100000
data=[2]
cnt=0
logdata=0
for i in range(n)[2:]:
for j in range(len(data)):
if (data[j]!=0)&(i!=0):
if i%data[j]==0:
cnt+=1
logdata+=1
if cnt==0:
data.append(i)
cnt=0
print data
print logdata

結果は...data(素数のリスト)はそれだけで64KBあるのでlogdata(計算回数)の部分だけかくと504793872でした。まだ、見ることのできる数字ですね。リスト型ってここまで便利なんだなと思った。サイズが動的確保なんでHSPやC++とかの配列より扱いやすい。
 さて、人工無能を育成ゲームに乗っけて見ました。実際の作業としては逆なんですけどね。人工無能に機能追加してみたらできちゃった感じ。画像↓
育成ゲーム
決して、本文が短くなるから画像とあまり関係ないPythonの記事で埋めたわけじゃない。たぶん。
author:いかろ

 

IBASIC

どうもこんにちは。いかろです。寒いですね。こんな日は(いろんな意味で)ニコニコしてるのが一番です。
前記事を見るとtan君が表示部分を作ってくれてるっぽいです。感謝。僕のほうはといいますと名詞抽出して質問するところまではできたのですが、それ以降とまっています。何とかせねば。
 代わりといっては何ですが、BASICのコンパイラ(正確にはインタプリタだけど)を作ってたりします。最初はJIS規格BASICにしようかと思ったんですが、だいぶオリジナルな書式になってしまいました。とりあえず実装できた命令としてはPRINT、LET、FOR~NEXT、IF~END IFの標準命令に自作命令としてVAL~VALEND、コメントをC/C++の//にしたところです。とりあえず、センター試験の問題を(多少書き直せば)問題なく実行できるレベルまで来ています。ただ、まだ演算子の優先順位を決めてない、整数値型のみ対応とHSP2.xを思わせるような仕様ですが。あと実装しなくてはいけないのはそういう計算のこまごましたところとINPUTですね。といってもINPUTにそんなに必要性を感じないのは僕だけでしょうか?THENが実質機能していないのもいただけないですね。まあ、勉強用にはこんなもんでいいかと。こんな感じです↓あと、トレース機能とかもつける予定。
IBASIC.jpg
さてなぜIBASICか?それはつらら(icicle)製のBASIC、そして自分(I)のBASICという意味をこめてIBASICとしました。

autor:いかろ

どうもお久しぶりですw

はい、お久しぶりです!その2の人こと、tanです。なんだかんだで最終の書き込みから約半年…。私こういうの苦手でして……ってそんなことをここに書きに来たわけで・は・な・い・です!

報告は2つ!といってもまだ大したことは何もしてないのですが、いかろさんの人工無能(自動会話AI?)を見て感動してしまって、いかろさんが苦手な画面に表示する側の処理を作っています。
いま使える機能は
 ・自動改行
 ・画面がいっぱいになったら消去:任意の場所で消去
 ・1文字を表示する待ち時間を変更
 ・改行するときの待ち時間を変更
 ・決定キー(エンターとか)を押すまで一時停止
 ・文字の装飾(サイズ、色、太字、斜体=イタリック体、アンダーライン、打ち消し線)
 ・etc
若干HTML風?に作ってるんできっと使いやすいはず…。まだできることは少ないですけど自分で作ってるんで、欲しい機能が簡単に付け加えられるのがいいところですかね。

その他実装予定の機能
 ・画像の表示:透過色の設定
 ・BGM等の再生、ストップ
 ・影をつける←重くなりそう
 ・条件分岐:値をシステム変数に代入
 ・ファイルの読み込み:条件分岐して使えばGJ
 ・誰でも使えるテキストエディタ
まあ細かいところをあげたらきりがないですが、とりあえず主だったものはこのくらいです。後は処理をもう少し軽くできたらいいかなと。
こんなこともしちゃったり
STOP
vistaではブルースクリーンならぬ、レッドスクリーンだとか何とか(ギャー
そしてMyPCはwindows vistaから7にアップデートされました←拍手!!
なんか動作が若干不安定な気がしなくもないですが。まあきっとvistaよりはいいんでしょう。

で、もうひとつのほうは、T_TRIS!
誰でもご存知であろうテ○リスです(一応隠すべきなのか?)。これがまた自分で仕組みを考えるわけで、なかなか楽しいです。ルールとか決まりごとはもともとあるものをそのまま使うので、いかに形にするかっ!ってところですかね。うまい人から見たらそんなに大げさに言うことでもなさそうですが、あたたかく見守ってやってください。

完成度からいうと30%そこそこです。うーん。ゴースト機能?とかホールドとかまだ課題はありますが、
ピースを操作するほうは完成しかけていて、頑張れば6個ピースなんて蛇道なこともできそうですねw
C++もやりたかったなぁ。

おっと、だいぶ長くなってしまいましたね。お付き合いいただいてありがとうです。
それではまたの機会で。
検索フォーム
RSSリンクの表示
リンク
ブログランキング
ブログランキング
はやぶさ2署名プロジェクト
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード