レス数が1スレッドの最大レス数(1000件)を超えています。残念ながら投稿することができません。
ヒッキープログラミングスレ
プログラミングの話題のスレ
質問・相談
初心者からプロまで
プログラミングに関することなら何でもOK
俺がやろうとしてることは単純な配列上にlispのコードを並べようという話なんだけどリストの区切り記号を入れないとダメかなあって
#define NIL 0
int list[100];
list[0] = 'A'; list[1] = 'B'; list[2] = 'C'; list[3] = NIL;
このlist[]に((A . B) C)を入れようとすると((A . B) C)は((A . B) . (C . NIL))だけどリストの区切りマークの概念がないと
list[0] = 'A'; list[1] = 'B'; list[2] = 'C'; list[3] = NIL; になって(A B C)と同じデータ構造になっちゃうから
もし((A . B) C)と(A B C)が違う構造のデータであるなら読み込めないかなあって
同様に((A . B) . C) と (A . (B . C)) のデータ構造が違うのならやはり配列に区切り文字を入れないといけないけど単純にドットのデータいれるだけだとこの2つは同じ
list[0] = 'A'; list[1] = '.'; list[2] = 'B'; list[3] = '.'; list[4] = 'C'; になっちゃうし・・・
((a . b) c)は(cons (cons a b) (cons c nil))で
(a b c)は(cons a (cons b (cons c nil)))だからなんかおかしい気がするが気のせい?
リストの最後がnilじゃない時とそうであるときの処理が大変なのかな
もしそうなら前に俺が抱えてた問題と同じみたい
((a . b) . c)をCライクな書き方をするなら
sublist[0] = 'A'; sublist[0] = 'B';
list[0] = sublist; list[1] = 'C';
になるはず
となるとリストの区切りとして括弧の情報が必要ってことなのか
list[0] = '('; list[1] = '('; list[2] = 'A'; list[3] = 'B'; list[4] = ')'; list[5] = '('; list[6] = 'C'; list[7] = NIL; list[8] = ')';
((A . B) C)はこんな感じか
>>814-815
詳しく説明ありがと
やはりその感じだとリストの区切りがあるんだね・・・
あとドットの扱いは(gensym)で作られたシンボルにして間違った位置ならエラーが出るようにしてる
配列じゃなくてリスト構造ってことか
struct list {
void *data;
list *next;
};
ってところか
>>819
Cで作るならそんな感じ
そうだなlispはリストプロセッサーなんだから当たり前だよな、リスト構造と配列をごっちゃに考えてて勘違いしてた、すまん
リスト構造と配列は全然違う構造のデータタイプなのに何で俺はごっちゃに考えて同じものだと勘違いしてたんだ・・・そのせいで余計な時間を費やしてしまった・・・orz
>>820
お手数をかけてしまってすまんかった、俺が1人勘違いして暴走してた・・・
というかCで作ろうとしてるのか?
メモリ破壊バグとの戦いになる予感
俺も費やした時間の9割がそんな感じで投げ出しちゃった
Cはポインタとかallocとかよく分からんから使う気はないけんど
ついに燃え尽きた
もうこれ以上手を入れて機能拡張する気にもならないし実際に使う気にも鳴らなくなった
もう一ヶ月以上CやjavaでLisp実装に時間を使ってるんだよなあ
land of lispも積ん読だしこれからどうしよう
大きくなると1人で管理するのは大変そうだしね
まだ3000行くらいだしそれは大丈夫だけどある程度動いたら満足してしまう
こちとらその十分の一の300行くらいで頭がパンクしそうだよ・・・
ちゃんとしたエディタ使えばもう少し管理しやすくなるんだろうけどね・・・
ごちゃごちゃしてくるとどこで何を処理してこの変数は何だったかとかチンプンカンプンに
>ある程度動いたら満足してしまう
これは俺もあるわ
純lisp今作業とどこおってるし
純lispの論文のevalの実現方法見てるんだが英文のとこちゃんと読まないとちょっと分からない感じだし
labelやlambdaとかかなり複雑怪奇に再現してるぽいし、
引数と本体をリストにして保存すればいけると思う
おそらくそうしてるんだろうけど、解読大変だわこの論文・・・英語がハードルすぎる
あと論文読んでたらeqをこの論文の仕様どおりに作って無かったことに気づいた>>578 のは間違ってた
eqは引数にatomic symbolしかとれずリスト渡すとundefinedにしないといけないのに>>578 としてたからNILになってたわ・・・
読んでいったら>>834 の言う感じの処理があった本当すごいわ・・・
まじかよ当たってたのか
論文からevalまでのlispコード全部書いてみたけどエラー出た・・
エラー検出の機能がテキトーだからlispコードのどこミスったのか分からん・・・さてどうするか
そもそも記述ミスなのか論文の括弧抜けが多いしM式からS式起こすだけじゃダメぽいな・・・
括弧抜けを補足するにはちゃんと理論を理解しないと補足できない
ここかな?とテキトーに括弧を補完したのがたぶん原因かな・・・
今日はもうオシマイ、純lispはまた明日やるとするか
>>838
自分もその問題に今悩まされてる
エラー時にどの行が間違えてるかも教えてくれればいいけどどうやってればいいんだろうな
難しい問題だな・・
もうpythonでlispのコードをpythonのバイトコードに生成してそれを実行しようと考えてみたけどそのほうが遥かに難しいな
それはそれでムズかしそうだな
俺はpythonは全く知らんからコードすら読めない
たしか括弧の代わりにタブインデントで何ちゃらの範囲を決める言語だっけか
そういやCのmakefileも処理部分はタブインデントしないといけないって2年くらい前に知ったわ
それ以前は毎度コマンドラインからコンパイラを呼び出してたけど
makeコマンドの使い方覚えてコンパイルがだいぶ楽になったなあ
なつかしい
それにしても「何ちゃら」が思い出せない、もう歳だなあ・・・物覚え悪いし物忘れ酷いし
ブロックじゃないかな
おお、そうだブロックだ、ブロック構造
ブロック構造なんてたいていのプログラミングに存在する概念だのにすごいド忘れだわ、hahaha・・・
そんな用語知らなくてもプログラム組めるからね
組むだけならね・・・入門書とか資料とかに書かれてて「何だっけこれ?」とかなるのは調べる時間が増えてデメリットはそれなりにあるよ・・・
ブロックをググってwikipeida見たらjavascriptにはブロック構造のスコープが無いってことを今初めて知ったわw
javascriptを初めて使ったのは大学時代の頃合いか10年前後前になるぞ・・・
ブロック (プログラミング) - Wikipedia
http://ja.wikipedia.org/wiki/%E3%83%96%E3%83%AD%E3%83%83%E3%82%AF_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)
ついでにリフレクションも調べた(wikipediaで(藁))
リフレクション (情報工学) - Wikipedia
http://ja.wikipedia.org/wiki/%E3%83%AA%E3%83%95%E3%83%AC%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3_(%E6%83%85%E5%A0%B1%E5%B7%A5%E5%AD%A6)
結構いろんな言語が持ってるだね・・知らんかったわ
perl,ruby,javascriptがあってpythonないとかハブられてるな
こうなったらYOUが書いChinaよ!
(´・д・`)ヤダ
そうか・・・まぁ面倒だもんね
ワロタ、またやっちまったw
間違って無限ループコード書いてブラウザ固まったww
それはブラウザが悪いな
無限ループを検出したら警告するべき
そういうもんなのか
javaのスタック浅いから自前で実装したいけどどうやってやるんだろう
スタックってこれ?
Stack (Java Platform SE 6)
http://docs.oracle.com/javase/jp/6/api/java/util/Stack.html
そのスタックの説明に↓これ使えって書いてあるけどこっちのほうの話?
ArrayDeque (Java Platform SE 6)
http://docs.oracle.com/javase/jp/6/api/java/util/ArrayDeque.html
javascriptでクラス(オブジェクト?)の設計誤ったわw
フィールドとかはJavaみたいなゲッターセッターのほうが無難だわな
とくにjavascriptの場合だと未定義の名前でもアクセスできるから()つけない呼び出しは危ないわ
名前の書き間違えのリスクを考えてなかった、書き直しだあ・・・
それだけどjavaでlisp処理系の実装で再起を深くするとネイティブスタックだと
すぐスタックオーバーフロー出るから自前でスタック実装できればいいなと思った
ttp://iup.2ch-library.com/i/i0937667-1371372856.png
とりあえず描画関数を増やしてみた
これでボタンとか作ればいいのか
おお!本格的ですげえな!
http://www.geocities.jp/takeiteasy_idontthinkso/mysoft/js_minimal_lisp/index.html
純LISPをある程度整理した、疲れた・・・
そろそろ純lispの枠を超えてlispをjavascriptにパースするプログラムとかどうなの
自分が欲しいだけだけど
パーズっていう言い方は間違えてるか
>lispをjavascriptにパースするプログラム
これってつまりどういうことをするプログラムなの?
javascriptを書かなくてもlispで書いたものをjavascriptに変換すれば和田英一さんでもハッピーになれるんじゃないかなという感じ
ライフゲームが動いて感無量
ttp://uploader.sakura.ne.jp/src/up123194.png
すげえ、マジですげえな
>>873
つまりhaxeみたいなトランスレータってこと?
こゆのとは違うの?
凄い。JavaScript上で動作するLisp「Javathcript」|オープンソース・ソフトウェア、ITニュースを毎日紹介するエンジニア、デザイナー向けブログ
http://www.moongift.jp/2012/08/20120815-3/
>>877
javascriptに変換しなくても出来るのかすごいな
俺が想像してたのはhaxeだけどこれなら変換する必要ないな
ライフゲームといえば何年か前にヒキ板のプログラミングスレでアップしたことがあったなあ・・・
ファイル探してみたら2008年の10月だった・・・もう5年も前だったのか・・・
リファレンスマニュアル書いてたら眠たくなってきた
>>879
出来れば見てみたい
というかプログラミング歴長いのにライフゲーム作ろうと思うのか
歴は長くてもレベルは低いと言ったろうが!(藁)
うpたときのロダのリンクお気に入りに入れてたけど、さすがに5年も前じゃリンク切れか・・・
ほいほい、過去にうpったの再ageよ
http://www1.axfc.net/uploader/so/2938897.zip?key=hikky
javascript製、このファイルの中でzipファイルになってるのが過去にうpしたやつ
何というか無難に動くね
特にこれと言って言うこと無いから困るけど
だから、歴は長くてもレベルは低(ry
まったくw俺がレベル低いという話を全く信用してなかったのかw
小4からやってて20年にはなるが密度が濃くなったのは大学時代後期からで
それでも2〜3か月に数日思いついたことを試すくらいだと言うたのに
でもvisual basicでシューティングゲーム作れてるからね
シューティングだと・・・!?まさか純lispのページ以外も見ちゃったの・・・/(^o^)\
つかあのレベルのものはVB6のポトペタではそう難しくないと、しかも自機以外は全部手抜きという(爆)
いや、普通に見られるだろ・・・
VB6はシングルスレッド固定だし、JavaScriptほどではないが変数もかなり自由に色色格納できるし
GUIはポトペタで作れるし、Windowsアプリのやっかいなメッセージ処理いらんし
すごく簡単だよ
windows持ってないしMSに捨てられた言語はノーサンキュー
まあちょっとレトロな感じが魅力的だけど
VB6はエクセルのVBAやVBScriptと元が同じ系列だからね、エクセルのマクロ作ってる人なんてごまんといるし、難しい言語ではない
そもそも BASIC言語 のスタンス自体が初心者向きなんじゃなかったっけか・・・
まぁだからあのHPで公開してる程度はすごくも何ともないんよ・・・
>>874
こゆの作ってしまうあなたのほうが何倍もすごい
VB以外でGUIアプリを作ってみようと思ったけど色々考えなきゃならないことが極端に増えるからね・・・CとかJavaとか、煩雑すぎる・・・
unix系のGUIは入門書のサンプルコードを走らせるくらいしかしたことないけど、あれも分かりづらかったなあ(かなり古いやり方が載ってる本だったけどね)
うpしたもののさっきはブラウザで動かしてみたしかしてなかったけど
ソースコードのほう見たらイミフすぎてワロタ
どういう原理で動いてんのか自分ですら分からんw
for文多いし謎の処理やたら多いし
パっと見としては無駄が多そうな印象だったが、今ライフゲームを作ろうと思っても仕組みを覚えてないからソラでは作れないなあ・・・
こういうの悪い設計というのかなあ、可読性ゼロすぎだわ
というか似たようなファイルがごちゃごちゃしててどれがどれだかわからんよ
当時直しながら何度かageたから
どれがどれだったか俺も分からんからまとめてageた
純lispの論文見てて気になったんだけど
((label F (lambda (X) X)) (quote ABC))
こういう感じのって関数が実行されるの?
もしそうなら
((quote CONS) (quote A) (quote (B C))) とかも関数が実行されたりするの?
これで実行するようには俺の純LISPは作られてないからさ・・・
それともlabel (define)の戻り値は設定した値が戻り値になったりするの?
今んとこ俺の実装だと(label A (quote B))の戻り値はAになるんだけど、普通のlispがこれの戻り値がBになるのなら、作り直さなきゃならんのよね・・・
あ、普通のlispだとlabelじゃなくてdefineなんだっけか、
うーむ、こればっかはIBM704ってマシンの仕様ってことになるから誰にも分からんか・・・
リストの先頭は評価せず
特別式関数マクロ名(アトム)かlambdaのリストかlambdaのリストを設定してるlabelのリストなら関数として認識するってことか?
うーむ、仕様がよく分からん、やはり何らかの実装を試す必要があるのか・・・
暑いし、また明日考えるとするか、寝よう、熱帯夜すぎる
スマートフォン版
掲示板管理者へ連絡
無料レンタル掲示板