【入門】CommonLispその2【質問よろず】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/02/15(水) 23:08:04初心者のQ&A
本スレでは恥ずかしくて聞けない人のQ&A
本スレは高度すぎて割り込めない人のQ&A
linuxでなくてwindowsでやりたいんですが・・・Q&A
lispを使用してC#やJAVAの代替にするための方法(おまけ)
ま、ゆっくりたりましょう。
「いいものの本質は、いかなる時代においても変わらない」byパワーズ
前すれ
http://pc8.2ch.net/test/read.cgi/tech/1101386936/l50
0002デフォルトの名無しさん
2006/02/15(水) 23:12:140003デフォルトの名無しさん
2006/02/15(水) 23:14:07/
3
/
/
0004デフォルトの名無しさん
2006/02/15(水) 23:17:40ル
ポ
0005デフォルトの名無しさん
2006/02/15(水) 23:38:12(SBCL: http://sbcl.sourceforge.net/
:プラットフォーム UNIX, Linux, Mac, Windows(移植中)
:開発 活発
:日本語 使える(UCS4, UTF8, EUC)
:特徴 一番お勧めのコンパイラ。)
(CLISP: http://clisp.cons.org/
:プラットフォーム UNIX, Linux, Mac, Windows
:開発 そこそこ活発
:日本語 使える
:特徴 バーチャルマシン。遅いがフットプリントが小さい。)
(CMUCL: http://www.cons.org/cmucl/
:プラットフォーム UNIX, Linux, Mac
:開発 そこそこ活発
:日本語 使えない(回避法有り)
:特徴 高速コンパイラ。SBCL の元になった。)
(OpenMCL: http://openmcl.clozure.com/index.html
:プラットフォーム PPC-Linux, Mac, x86-Linux と FreeBSD に移植中
:開発 そこそこ活発
:日本語 使えない
:特徴 元々商用のコンパイラ。ネイティブスレッドが使える。))
0006デフォルトの名無しさん
2006/02/15(水) 23:39:51(ABCL: http://armedbear-j.sourceforge.net/
:特徴 JavaVM 上で動く。JavaVM のバイトコードを生成。)
(ECL: http://ecls.sourceforge.net/
:特徴 Lisp->C コンパイラ。組み込み可能らしい。)
(GCL: http://www.gnu.org/software/gcl/
:特徴 日本発 Kyoto Common Lisp の直系。))
0007デフォルトの名無しさん
2006/02/15(水) 23:53:03http://www.lisp.org/HyperSpec/FrontMatter/index.html
http://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/html/cltl/cltl2.html
日本語のチュートリアル
ttp://web.sfc.keio.ac.jp/~t02064si/lisp2005/
ttp://www.h7.dion.ne.jp/~matsu/feature/common-lisp/index.html
ttp://www.geocities.jp/m_hiroi/xyzzy_lisp.html
ttp://home.soka.ac.jp/~unemi/LispProlog/
ttp://www.haun.org/kent/lisp1/
ttp://wisdom.sakura.ne.jp/programming/lisp/index.html
ttp://www-kasm.nii.ac.jp/~takeda/lectures03/titech/ai1/Text/CL.txt
進んだ話題が欲しい人に...
http://planet.lisp.org/
http://groups.google.co.jp/group/comp.lang.lisp
http://www.cliki.net/index
http://cl-cookbook.sourceforge.net/
http://www.gigamonkeys.com/book/
ttp://www.geocities.co.jp/SiliconValley-SanJose/7474/index.html
ttp://www.geocities.co.jp/SiliconValley-Cupertino/2478/root-sect-2.html
http://wiki.alu.org:80/
0008デフォルトの名無しさん
2006/02/16(木) 00:15:330009デフォルトの名無しさん
2006/02/16(木) 00:16:35http://pc8.2ch.net/test/read.cgi/tech/1132275726/
Schemer な人や、上級者 Lispnick はこちらへ。
0010デフォルトの名無しさん
2006/02/16(木) 02:52:31(POPLOG: http://www.cs.bham.ac.uk/research/poplog/freepoplog.html
Lisp, Prolog, ML のコンパイラ)
(WCL: http://wcl.kontiki.com/
Shared Library として使える Lisp)
(Movitz: http://common-lisp.net/project/movitz/movitz.html
フルスクラッチの Lisp OS)
(CADR LispM: http://www.heeltoe.com/retro/mit/mit_cadr_lmss.html
MIT で使われていた LispM のソースを公開したもの))
((その他のリンク
(Common-Lisp.net: http://common-lisp.net/
Common Lisp のプロジェクトが沢山ホスティングされている)
(Meme channels: http://meme.b9.com/start.html
Lisp の IRC Log)
(Paul Graham の ANSI Common Lisp:
http://www.pearsoned.co.jp/hed/search/onlinecatalog.html?id=276
Common Lisp の 参考書を探しているならこれ一択))
0011デフォルトの名無しさん
2006/02/16(木) 08:02:330012デフォルトの名無しさん
2006/02/16(木) 15:04:560013デフォルトの名無しさん
2006/02/16(木) 18:38:00合致する全てのファイルを削除するlisp式ってどう書きます?
前スレでも教えてもらったのだがABCLではどう書きます?
0014デフォルトの名無しさん
2006/02/16(木) 19:12:18(mapc #'delete-file (directory "/path/*.ext"))
0015デフォルトの名無しさん
2006/02/16(木) 19:51:12ありがとうございます
ここの人は優しいなァ
0016デフォルトの名無しさん
2006/02/16(木) 21:27:11同意。英語も平易だし。おまいら読め!
0017デフォルトの名無しさん
2006/02/17(金) 01:00:12ていく様子なのですが、そういうもんなんでしょうか?
たとえば、arrayの中の与えられた要素の和を返す関数:
(defun foo1 (array positions)
(let ((sum 0.0))
(map nil #'(lambda (x) (setq sum (+ sum (aref array x)))) positions)
sum))
(compile 'foo1)
に対して float のarrayを以下のように作成します。
(setq sa1 (make-array 10 :element-type 'float
:initial-contents (loop for i from 1.0 to 10.0 by 1.0 collect i)))
すると、
(time (foo1 sa1 #(1 2 3 5 7)))
……
; space allocation:
; 3 cons cells, 80 other bytes, 0 static bytes
といった具合に「80 other bytes」が使われます。
これは定数ではなくアクセスする数が増えるに応じて16bytesずつ使われます。
一方で、integerの場合
(time (foo2 sa2 #(1 2 3 5 7)))
……
; 3 cons cells, 0 other bytes, 0 static bytes
となり 0 otehr bytes です。
大きなfloatのarrayを使いたいので何とかならないかなと思っているのですが…
処理系はAllegroを使っています。
どなたか情報お持ちの方教えてください。
0018デフォルトの名無しさん
2006/02/17(金) 01:13:56ガベジコレクタ様がよきに計らって下さるので、下々の者は気にしない、気にしない。
001917
2006/02/17(金) 01:30:53プログラムがやたら遅くなるので、やっぱなんとかならないかなと
思ってます。
ついでですが、>>17のfoo1は loop 〜 across 〜 summing を使った方
が見やすかったかもですね。
(個人的には loop は意味不明なのでなるたけ避けてる)
0020デフォルトの名無しさん
2006/02/17(金) 01:48:21002117
2006/02/17(金) 03:07:06(declare (type (array float (*)) array)) および (the (aref array x))
を入れてやってみましたが変わらずでした。
まさか、fixnum を越えるような値の場合は必ず一旦変換するのかなあ…
0022デフォルトの名無しさん
2006/02/17(金) 03:08:07失礼 (the float (aref array x)) です。
0023デフォルトの名無しさん
2006/02/17(金) 03:12:27integer でも fixnum を超える(most-positive-fixnum 以上になる)と
メモリ消費量が増えていくんじゃない? ACL は使った事無いけど...
002423
2006/02/17(金) 03:14:28optimize space とかも試してみたけど、ダメだった。
002517
2006/02/17(金) 03:44:41Allgro でも同様でした。
array を作るときならともなく、どうしてアクセスするのに
毎回メモリがいるんだろう… ポインタ辿ればすむ話じゃないんですかねぇ…
実は、Allegro の make-array には、
「特定の :element-type であれば、GCに触られないような static
な array のアロケーションができる」
っていういかにも期待できそうなのが独自拡張があるんですが、s
ingle-float を :allocation :static しても結果は同様でした。
http://www.franz.com/support/documentation/7.0/doc/implementation.htm#cl-make-array-2
0026デフォルトの名無しさん
2006/02/17(金) 03:58:00002723
2006/02/17(金) 04:01:02SBCL の Compiler Note だと "<return value>" つーのが正体かな?
; (+ SUM (AREF ARRAY X))
;
; note: doing float to pointer coercion (cost 13) to "<return value>", for:
; the first result of inline float arithmetic
002823
2006/02/17(金) 04:02:300029デフォルトの名無しさん
2006/02/17(金) 04:28:44#'(lambda (x) (setq sum ...) (values)) だとどうよ。
0030デフォルトの名無しさん
2006/02/17(金) 06:32:42(declare (optimize (speed 3) (space 0) (debug 0) (float 0)))
(declare (type (simple-array double-float (*)) array)
(type (simple-array fixnum (*)) positions)
...)
と do, svref に the double-float, the fixnum とか使って positions の要素数に
かかわらず Allocation = 16 bytes standard / 0 bytes conses まで最適化できた.
Allegro はしらんけど float って型じゃ意味なくね? double-float とか single-float
とか指定すべきでは.
0031デフォルトの名無しさん
2006/02/17(金) 08:27:53持って行った。けど間違った結果が返って来る罠(w
(declareに:explain仕掛けて真剣にコンパイラと向き合わないとダメだろね。きっと。
0032デフォルトの名無しさん
2006/02/17(金) 11:11:26この場合非破壊的変更だから、sum を変更する際はヒープに float 領域を
割り当て、そのポインタを sum が指すようコンパイルされる。
一方、マクロを使って
(defun foo1 (array positions)
(declare (type (simple-array single-float (*)) array))
(let ((sum 0.0))
(declare (type single-float sum))
(dotimes (i (length positions) sum)
(setq sum (+ sum (aref array (aref positions i)))))))
のようにすれば、(コンパイラにもよるけど) sum をレジスタに割り当てる
ことができるので、変更する度にヒープを使うことはなくなる。
詳しくは disassemble してみよう。
003317
2006/02/17(金) 11:34:16主に>>30,>>31を参考にして、
(defun foo3 (array positions)
(declare (optimize (speed 3) (space 0) (debug 0))
(type (simple-array single-float (*)) array))
(let ((sum 0.0)
(psize (1- (the fixnum (array-total-size positions)))))
(do ((i 0 (incf i)))
((> i psize))
(setq sum (+ (the single-float sum) (the single-float (aref array (the fixnum (aref positions i)))))))
sum))
を「AllegroCL8.0で」動かすと見事定数にできました。
# >>31 にあるような間違った結果はまだ確認できてないです
実はこれまでACL7.0を使ってたのですが、同じ関数でもACL7.0
ではうまくいきませんでした。
なんだかいろいろと勉強になりました。
特になんでもコンパイラ任せにしてたのを反省できたのが収穫でした。
003517
2006/02/17(金) 12:26:17改めて>>32をAllegroCL7.0で
(declare (optimize (speed 3) (space 0) (debug 0)))
で動かすと、これは(ACL8でなくとも)見事定数でした。
>>33で「ACL7だめじゃん」って思った俺がだめだめでした。
003630
2006/02/17(金) 22:30:44すまん。 simple-vector と svref な。(simple-array と svref で debug 0, safety 0 じゃバグるって)
SBCL 0.9.9.31 と LispWorks 4.4.6 ともにコンス無しにできたよ。
0037デフォルトの名無しさん
2006/02/18(土) 01:07:11人づてに聞いた話では古参Lisper達は「コンパイルしたらコードがどう生成されるか」を
常に意識してS式を叩いていたそうな。
近頃の若いモンはなっとらんと叱られたけどそんな細かいところまでチューニングする
必要に駆られることあまり無いからね。やるにしてもプロファイラ使ってちゃんと
追い込んでいかないと要らんトコ最適化してたりするし。
0038デフォルトの名無しさん
2006/02/18(土) 08:54:33Cプログラマでもやるよ。
おれはヘタレなスクリプト言語しか使えないけど…
0039デフォルトの名無しさん
2006/02/18(土) 09:20:530040デフォルトの名無しさん
2006/02/18(土) 14:03:54でもLispならパターン決まっちゃえばあとはマクロで楽々だからな。
C++ のテンプレートとかも気分的には近いものはあるが。
0041デフォルトの名無しさん
2006/02/18(土) 14:20:49004210
2006/02/18(土) 23:58:360043デフォルトの名無しさん
2006/02/19(日) 01:27:12長いリストになったねw
0044デフォルトの名無しさん
2006/02/23(木) 01:17:12lipsデータを取る方法は解ったんですが、渡す方法が解らないです。
0045デフォルトの名無しさん
2006/02/23(木) 14:30:13出来なかったりするのか?
004644
2006/02/23(木) 14:43:48そりゃそうかも知れないな。
VMの上で動作するんだから、そこでclassファイルを動的には生成
できないよな。
となると動的ORMapperとか作れないということか、残念。
ちなみにここ参考になる
ttp://jroller.com/page/berlinbrown
0047デフォルトの名無しさん
2006/02/24(金) 00:17:490048デフォルトの名無しさん
2006/02/26(日) 01:45:41これの仕様ってわかりますか?
0049デフォルトの名無しさん
2006/02/26(日) 01:49:140050デフォルトの名無しさん
2006/02/26(日) 02:59:50John McCarthyの論文に書いてあるやつのことかな。
car, cdr, cons, cond, lambda? 他に必要なものあるかな。
http://www-formal.stanford.edu/jmc/recursive.pdf
005150
2006/02/26(日) 03:20:45PostScriptファイルの中に書いてあるけど、
quote, atom, eq, car, cdr, cons, cond
だそうな。でもそれだけじゃ物足りなくて、
関数定義をするためにlabelとlambdaが必要だとのこと。
http://www.paulgraham.com/rootsoflisp.html
0052デフォルトの名無しさん
2006/02/26(日) 03:22:590053デフォルトの名無しさん
2006/02/26(日) 03:26:46quoteのかわりにeqが要るらしい
http://ja.wikipedia.org/wiki/%E7%B4%94LISP
五つの基本関数とは、
1. car リストの左値をとり出す。(car[(A . B)] -> A)
2. cdr リストの右値をとり出す。(cdr[(A . B)] -> B)
3. cons 二つの値からなるリストを作る。(cons[A;B] -> (A . B))
4. atom 値がアトムならTを返す。(atom[(A B)] -> nil, atom[nil] -> T)
5. eq 二つの値が同じ物ならTを返す (eq[A;A] -> T)
以上が最小構成のLISPであり、理論上チューリングマシンと同等の能力を持つ。
0054デフォルトの名無しさん
2006/02/26(日) 03:33:32論文斜め読みした。5関数といくつかの天下りシンボル(NIL, T, LAMBDA, QUOTE)で
万能関数(要するにeval)がちゃんと定義できるよという感じか。
0055デフォルトの名無しさん
2006/02/28(火) 05:15:45lambdaは関数じゃないけど。
0056デフォルトの名無しさん
2006/02/28(火) 05:42:260057デフォルトの名無しさん
2006/03/02(木) 04:04:59Emacsを使っていたのでいっちょlispを本格的に覚えようかと思い、
Debian(sarge)にapt-get install gclでGNU Common Lispを入れてみました。
が、gclで起動後、どうやったらtest.lspに書いたlispコードを実行してくれるのでしょうかが分からず困っています。
test.lspの中身は(+ 1 2)です。
ちなみにclispも入れてみたのですがclisp test.lspとすると、
WARNING: *FOREIGN-ENCODING*: reset to ASCIIというエラーが出るのですが、
こちらもお分かりになる方がいましたら合わせて教えていただけたらと思います。
お願いします。
0058デフォルトの名無しさん
2006/03/02(木) 04:07:10>実行してくれるのでしょうかが分からず困っています。(誤)
実行してくれるのかが分からず困っています。(正)
0059デフォルトの名無しさん
2006/03/02(木) 07:05:06> (load "test.lisp")
かね.clisp のエラーは,たぶん使ってる環境の文字コード設定が
clisp に理解できてない.iconv がリンクされてないか,環境の設定が
おかしいか.とりあえず clisp -Eforeign 1:1 とでもすればいくない?
clisp -Eforeign ascii test.lisp でもいいかも
006057
2006/03/02(木) 22:42:31レスありがとうございます。
>(load "bin/test.lsp")
Loading bin/test.lsp
Finished loading bin/test.lsp
T
となりました。
どうやらこれで読み込みは出来たという事みたいですが、
実行結果を出力するにはこれだけでは足りないのでしょうか。
clispは相変わらず以前と同じエラーが出ています。
エンコード設定はEUC-JPです。
システム自体のエンコードも、ファイルのエンコードも同じです。
ひょっとしてclispはEUC-JPは使えないのでしょうか。
何かおかしいと思って、test.lspの中身を
(+ 1 2 3)から(print (+ 1 2 3)としたら
clispでもgclでも以下の様に実行する事が出来ました。
[1]> (load "bin/test.lsp")
;; Loading file test.lsp ...
6
;; Loaded file test.lsp
T
しかし相変わらずclisp test.lspで一気に実行結果出力は出来ませんでしたが、
実行する事は出来ました。
ありがとうございます。
何やらshやphp等とは全く違う感じですね。
こんな初心者ですがこれからもよろしくです。
0061デフォルトの名無しさん
2006/03/02(木) 23:45:24なりするでしょ?表示っつー機能が必要.
CLISP は適切な libiconv がリンクされていれば EUC-JP は使える.が,どう
も貴方のお使いの CLISP は他言語サポートが入ってないんじゃないかという気
がしてきた.
(format t "~{~A~&~}" (list (lisp-implementation-version) *features*))
こんな一行のファイルを foo.lisp とでも保存して,clisp foo.lisp で結果を
張り付けてくれ.あと,できればプロンプトで (load "bin/test.lsp") と操作
できるなら,euc サポートが含まれているか確認してみて.
[1]> charset:euc-jp
#<encoding "EUC-JP" :unix>
[2]>
上記は私の環境での結果です.EUC も UTF-8 も SHIFT-JIS も使えてるよ.
006257
2006/03/03(金) 00:23:16;; Loading file foo.lisp ...2.33.2 (2004-06-02) (built 3318073317) (memory 3350292839)
(ASDF SYSCALLS CLX-ANSI-COMMON-LISP CLX REGEXP CLOS LOOP COMPILER CLISP ANSI-CL COMMON-LISP LISP=CL
INTERPRETER SOCKETS GENERIC-STREAMS LOGICAL-PATHNAMES SCREEN FFI GETTEXT UNICODE
BASE-CHAR=CHARACTER PC386 UNIX)
;; Loaded file foo.lisp
T
[2]> charset:euc-jp
#<ENCODING "EUC-JP" :UNIX>
です。
どうでしょう。
>つうか sh でも php でも計算結果を表示しようと思ったら
なるほど。確かにそうですね...
0063デフォルトの名無しさん
2006/03/03(金) 01:02:04入ってるね.ASDF が入ってるところをみると,誰かが設定済みなのかな.
WARNING: *FOREIGN-ENCODING*: reset to ASCII
これはエラーじゃなくて警告ね.FFI とか C とのやりとで使うエンコーディン
グが ASCII コンパチじゃないといっている.
clisp -Eforeign iso-8859-1
のような ASCII コンパチの encoding を指定すれば消えるんじゃないかな.もっ
と新しいバージョンだと clisp -Eforeign 1:1 とかいけるんだけど.
006457
2006/03/03(金) 02:09:57中々難しいかもしれないけどがんばってみます。
clisp立ち上げずに下記をたたいてみたら、
clisp -Eforeign euc-jp lisp/test.lsp
WARNING: *FOREIGN-ENCODING*: reset to ASCII
6
と、相変わらずワーニングは出るけど結果は出力されました。
clisp lisp/test.lsp
WARNING: *FOREIGN-ENCODING*: reset to ASCII
6
とやっても同じのようですね。
>ASCII コンパチの encoding を指定すれば消えるんじゃないかな
この辺キーワードにして調べてみます。
ありがとうです。
0065デフォルトの名無しさん
2006/03/03(金) 02:22:27接呼び出す機能 (Foreign-Function Interface)」で使うエンコーディングを指
定しますが,通常ここはバイト列として扱いたい ( C のライブラリでは画像
データなど文字以外も扱えるので)なんで日本語のエンコーディング指定しちゃ
ダメです.バイト列として扱うために,あえて
clisp -Eforeign iso-8859-1
のように指定します.端末やファイルのエンコーディングの指定とは別の指定
なので,このように指定したかといって日本語が使えなくなるとかそーゆう事
はありません.むしろ,ここで euc-jp を指定しているから WARNING が出てい
るんです.上記のように iso-8859-1 を指定すれば治ると思いますよ.
0066デフォルトの名無しさん
2006/03/03(金) 02:48:58国際化されたライブラリを呼び出す場合、EUC-JP に setlocale されてる環境
で文字を ISO-8859-1 にエンコードして渡すとかえっておかしくなるよ。
>>57 の環境で warning が出るのは 2.33 以前では FFI にマルチバイトエンコー
ディングを使えなかったから。
NEWS:
2.34 (2005-07-20)
* The FFI variable FFI:*FOREIGN-ENCODING* can now be a multibyte encoding.
The warning "*FOREIGN-ENCODING*: reset to ASCII" at startup is gone.
006757
2006/03/03(金) 13:10:21なるほど。
という事でやってみました。
$ clisp -Eforeign iso-8859-1 lisp/test.lsp
6
出来ました。
ありがとうございます。
ついでに以下もやってみました。
$ clisp -Eforeign unicode lisp/test.lsp
WARNING: *FOREIGN-ENCODING*: no encoding UNICODE, using ASCII
6
$ clisp -Eforeign ascii lisp/test.lsp
6
将来的にはCLOS(でしたっけ?)を使えばサーバアプリを(多分)書けるとの事なので、
やってみたいですね。
ひょっとしてclisp 2.33より上ならば何も問題無いのかな。
だとしたら本家からDLして持ってきたら良いのかな?
とちその辺も含めて色々とやってみます。
どうもありがとう。
0068デフォルトの名無しさん
2006/03/18(土) 22:55:36> MSN サーチで "CLISP Win32 日本語" って検索したら libiconv を
> リンクした Windows 用の CLISP バイナリみつけた。
> http://lispuser.net/commonlisp/clisp.html
0069デフォルトの名無しさん
2006/03/18(土) 23:18:02CLISP最強伝説の幕開けか?
0070デフォルトの名無しさん
2006/03/18(土) 23:26:56バランスの良い処理系だと思う。インタプリタの速度なら結構良い勝負するし。
0071デフォルトの名無しさん
2006/03/18(土) 23:41:31もちつけ。CLISP じゃ伝説はむりだろ。まぁ起動時にエンコーディングまわり
の警告がでないという点は初心者向けには良いのではないだろうか。
0072デフォルトの名無しさん
2006/04/07(金) 11:06:48下のようなコードはLISPだと根本的に書き方がちがくなるのか?
{
FileOpenDialog fdlg=new FileOpenDialog();
RESULT res=fdlg.DoOpen();
if(res==OK){
Files files=fdlg.SelectedFiles;
FileSystem.CopyFiles(files);
}
}
神様よろ。
0073デフォルトの名無しさん
2006/04/07(金) 11:07:29{
FileOpenDialog fdlg=new FileOpenDialog();
RESULT res=fdlg.DoOpen();
if(res==OK){
Files files=fdlg.SelectedFiles;
FileSystem.CopyFiles(files);
}
}
0074デフォルトの名無しさん
2006/04/07(金) 14:50:010075デフォルトの名無しさん
2006/04/07(金) 22:06:08括弧の位置が変わるくらいじゃないかな?
慣れればその違いも気にならなくなると思うよ。
基本的には
object.method(arg);
ってのが
(method object arg)
になるって感じ。
0076デフォルトの名無しさん
2006/04/07(金) 22:50:12(with-file-open-dialog (files) (file-system-copy-files files))
とか
0077デフォルトの名無しさん
2006/04/12(水) 23:36:460078デフォルトの名無しさん
2006/04/12(水) 23:49:48サクラインターネットとか?
使えるつーか、コンパイル環境あるからgaucheとか入れれるよ
0080デフォルトの名無しさん
2006/04/15(土) 00:52:120081デフォルトの名無しさん
2006/04/17(月) 02:09:22最近,SchemeでSchemeのコンパイラを作ってみたいなと思っています。具体的にはSchemeのコードをネイティブなマシンコードへコンパイルしてみたいと考えています。そのためにはどのような本を読めばいいのでしょうか?
0082デフォルトの名無しさん
2006/04/17(月) 02:16:18君の知識、得意分野、アイデアをもうちょっと晒してもらわんとなんともはや。
少なくとも「サルでも作れるSchemeコンパイラ」のような本は無いと思う。w
0083デフォルトの名無しさん
2006/04/17(月) 02:37:58すみませんでした。
処理系はGaucheを使っていて日常の雑務を行うプログラムを組んだりライブラリを使ったりできます。また継続やマクロを使ってプログラムを組めます。BNFで書かれた仕様も読んだり書いたりできます。
わからないのは,どうやって読み込んだS式を効率良い形に変換し,マシンコードへ変換するかというところと,アセンブラです。アセンブラはCASLでやっただけです。
0084デフォルトの名無しさん
2006/04/17(月) 03:37:48これは俺も知りたい。多分、論文嫁って事になると思うけど。
ま、最初は↓こんなところを見ながら当りを付けて行くのが
良いかと。
http://www.federated.com/~jim/schintro-v14/schintro_toc.html
http://www.is.s.u-tokyo.ac.jp/~vu/97/jugyo/processor/compilerresume/
アセンブラは gcc が吐いたのを読むのが王道かと。
教材は、x86 なら↓これがお勧め。
http://ssl.ohmsha.co.jp/cgi-bin/menu.cgi?ISBN=4-274-13207-2
Scheme で ASM なら↓こんなのがある。これも x86 だね。
http://home.earthlink.net/~krautj/sassy/sassy.html
あと、ここは Common Lisp スレだから、Scheme な話題なら
↓こっちに行った方が良いと思うよ。
Common Lisp, Scheme Part 14
http://pc8.2ch.net/test/read.cgi/tech/1132275726/
0085デフォルトの名無しさん
2006/04/17(月) 03:41:02コンパイラ作りたい初心者に向いてる言語じゃない様な気がする。
0086デフォルトの名無しさん
2006/04/17(月) 09:04:410087デフォルトの名無しさん
2006/04/17(月) 11:43:01ありがとうございます!
さっそく読んでみます。
0088デフォルトの名無しさん
2006/04/17(月) 23:11:42http://www.is.s.u-tokyo.ac.jp/~vu/97/jugyo/processor/compilerresume/
0089デフォルトの名無しさん
2006/04/17(月) 23:36:17既存のコンパイラのソース読むのが一番速いし。
ttp://www.score.is.tsukuba.ac.jp/~minamide/compiler-jikken/index.html
ttp://www.ie.u-ryukyu.ac.jp/~kono/lecture/compiler/index.html
0090デフォルトの名無しさん
2006/04/18(火) 22:21:550091デフォルトの名無しさん
2006/04/23(日) 02:47:470092デフォルトの名無しさん
2006/04/23(日) 02:59:14というのは冗談としても、わざわざインクリメンタル GC を実装している
処理系自体少なそうだね。
0093デフォルトの名無しさん
2006/04/23(日) 20:08:52tricolor schemeをそのままコードにしたようなものでわかりやすい
と思った。いわゆるlightweight系な言語だったのは覚えてるんだが
どの言語だったかはっきり覚えてない。すまん。
0094デフォルトの名無しさん
2006/04/30(日) 22:05:55SBCL-0.9.12にWINDOWSのバイナリーがあったので
落としてきたのだけど、インストールマニュアルを見ても
起動しない・・・
sbcl-0.9.12-x86-win32\src\runtime にパスを通して
SBCL --core sbcl.core で起動しても当然coreが見つからんし
英語読解力不足を棚に上げて悪いけど助けて!
0095デフォルトの名無しさん
2006/05/01(月) 00:38:44src\runtime\sbcl.exe --core output\sbcl.core
で起動するよ。
Windows で SLIME 使いたいならちょっと前にでてた
http://lispuser.net/commonlisp/clisp.html
が一番てっとりばやいと思われ。SBCL on Win32 はまだ罠大杉・・・
0096デフォルトの名無しさん
2006/05/01(月) 07:54:360097& ◆D3ra0B2LiQ
2006/05/01(月) 08:44:53ありがとう動いたよ!
SBCL ON Win32がまだまだなのはわかってるんだけど
あの爆速を体験すると触りたくなるのよね。
WinでLisp & Schemeとなると選択肢減るし、
普段が Petite Chez だからスピードに憧れるのよね。
0098デフォルトの名無しさん
2006/05/04(木) 04:49:34SBCL のスレッド回りも急激に進展してるようで、非常に wktk.
0099デフォルトの名無しさん
2006/05/06(土) 16:24:41lispってCommon LispとかSchemeとかいろいろあるみたいですが、
何が違うのでしょうか?
0100デフォルトの名無しさん
2006/05/06(土) 16:50:310101デフォルトの名無しさん
2006/05/06(土) 17:32:27C と C++ みたいな違い。
■ このスレッドは過去ログ倉庫に格納されています