【入門】Common Lisp その3【質問よろず】
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2007/06/10(日) 21:41:07初心者のQ&A
本スレでは恥ずかしくて聞けない人のQ&A
本スレは高度すぎて割り込めない人のQ&A
linuxでなくてwindowsでやりたいんですが・・・Q&A
lispを使用してC#やJAVAの代替にするための方法(おまけ)
ま、ゆっくりたりましょう。
「いいものの本質は、いかなる時代においても変わらない」byパワーズ
(list
(url http://pc8.2ch.net/test/read.cgi/tech/1101386936/l50 :part 1)
(url http://pc11.2ch.net/test/read.so/tech/1140012484/l50 :part 2))
0003デフォルトの名無しさん
2007/06/10(日) 23:51:570004デフォルトの名無しさん
2007/06/11(月) 00:12:46(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 に移植中
:開発 そこそこ活発
:日本語 使えない (pre ver 1.1なら多少扱える。)
:特徴 元々商用のコンパイラ。ネイティブスレッドが使える。))
0005デフォルトの名無しさん
2007/06/11(月) 00:14:29(ABCL: http://armedbear-j.sourceforge.net/
:特徴 JavaVM 上で動く。JavaVM のバイトコードを生成。)
(GCL: http://www.gnu.org/software/gcl/
:特徴 日本発 Kyoto Common Lisp の直系。)
(ECL: http://ecls.sourceforge.net/
:特徴 Lisp->C コンパイラ。組み込み可能らしい。こちらもKCLの系譜))
0006デフォルトの名無しさん
2007/06/11(月) 00:22:38http://www.lisp.org/HyperSpec/FrontMatter/index.html
http://www.cs.cmu.edu/afs/cs.cmu.edu/project/ai-repository/ai/html/cltl/cltl2.html
http://lispdoc.com/
日本語のチュートリアル
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
0007デフォルトの名無しさん
2007/06/11(月) 00:24:18(和文)
ttp://www.geocities.co.jp/SiliconValley-SanJose/7474/index.html
ttp://www.geocities.co.jp/SiliconValley-Cupertino/2478/root-sect-2.html
ttp://lispuser.net
(英文)
http://wiki.alu.org:80/
http://www.cl-user.net
http://www.common-lisp.net
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/
( http://www.apress.com/free/ よりpdf版が入手可能)
http://www.psg.com/~dlamkins/sl/cover.html
http://www.cs.cmu.edu/~dst/LispBook/index.html
その他の情報
http://ja.wikipedia.org/wiki/Common_Lisp
0008デフォルトの名無しさん
2007/06/11(月) 00:26:37(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 のソースを公開したもの))
((その他のリンク
(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 の 参考書を探しているならこれ一択))
0009デフォルトの名無しさん
2007/06/11(月) 00:29:13が和書として登場した事も記しておかないと。
0010デフォルトの名無しさん
2007/06/11(月) 00:38:53テンプレに Allegro って入ってないのね。商用だから?
0011デフォルトの名無しさん
2007/06/11(月) 00:44:52商用CL
http://jp.franz.com/index.html
free downloadから登録して使えるらしい
http://www.lispworks.com/downloads/index.html
IDEがついているらしい
0012デフォルトの名無しさん
2007/06/11(月) 01:53:11|scheme自重しろww ちょww|
| ↑自重(ry |
|ーかそれはないだろww |
| |
| |
| |
| リリカルは俺の嫁。 .|
└────────────┘
0013デフォルトの名無しさん
2007/06/13(水) 03:41:07どなたか教えていただけないでしょうか
0014デフォルトの名無しさん
2007/06/13(水) 03:42:310015デフォルトの名無しさん
2007/06/13(水) 03:43:210016デフォルトの名無しさん
2007/06/13(水) 03:44:030017デフォルトの名無しさん
2007/06/13(水) 03:45:500018デフォルトの名無しさん
2007/06/13(水) 03:46:37俺のほかにも、少なくとも1人居るみたいだから任せた。
0019デフォルトの名無しさん
2007/06/13(水) 04:07:519
(1 1 1 1 1 1 1 0 1)
(1 0 0 0 0 0 0 0 1)
(1 0 1 0 1 1 1 0 1)
(1 0 1 0 0 0 1 0 1)
(1 0 1 1 1 0 1 0 1)
(1 0 1 0 0 0 1 0 1)
(1 1 1 0 1 1 1 0 1)
(1 0 0 0 1 0 0 0 1)
(1 0 1 1 1 1 1 1 1)
上記のようなデータが入ったテキストファイルを読み込んで、迷路を解くという問題です
最初の数字が迷路のサイズを表していて、ここでは9なので9*9です
1が壁、0が道となっています
0020デフォルトの名無しさん
2007/06/13(水) 04:09:07a.迷路ストラクチャを定義せよ.迷路ストラクチャは,迷路のサイズ(整数値)と迷路の形状データ(2次元配列)を保持する
b.迷路ファイル名を引数に受け取り,それを読み込み迷路ストラクチャを返す関数 load-maze を定義せよ
>(load-maze "m9.txt")
#S(MAZE SIZE 9 DATA
#2A((1 1 1 1 1 1 1 1 1) (1 0 0 0 0 0 1 0 0) (1 0 1 1 1 1 1 0 1)
(1 0 0 0 1 0 0 0 1) (1 0 1 0 1 0 1 1 1) (1 0 1 0 0 0 1 0 1)
(1 0 1 1 1 1 1 0 1) (0 0 0 0 0 0 0 0 1)
(1 1 1 1 1 1 1 1 1)))
0021デフォルトの名無しさん
2007/06/13(水) 04:10:06>(setq m (load-maze "m9.txt"))
>(print-maze m)
■■■■■■■ ■
■ ■
■ ■ ■■■ ■
■ ■ ■ ■
■ ■■■ ■ ■
■ ■ ■ ■
■■■ ■■■ ■
■ ■ ■
■ ■■■■■■■
NIL
d.迷路データファイルを入力として受け取り,スタートからゴールまでの最短パスを出力する関数 solve-maze を作成せよ.プログラムがなるべく読みやすくなるよう作成すること
>(solve-maze "m9.txt")
■■■■■■■*■
■ *****■
■ ■*■■■ ■
■ ■***■ ■
■ ■■■*■ ■
■ ■***■ ■
■■■*■■■ ■
■***■ ■
■*■■■■■■■
Solved!
NIL
0022デフォルトの名無しさん
2007/06/13(水) 04:11:170023デフォルトの名無しさん
2007/06/13(水) 06:33:33お願いにいくところから始めよう。
0024デフォルトの名無しさん
2007/06/13(水) 07:01:01見た事あるけれど、たしか、プログラミングコンテストの問題だった気がする。
本があったかなぁ?
0025デフォルトの名無しさん
2007/06/13(水) 07:10:080026デフォルトの名無しさん
2007/06/13(水) 07:13:40cl-user(142): (defstruct maze size data)
maze
cl-user(143): (make-maze :size 4 :data #2a((1 0 0 0) (1 0 0 0) (1 0 0 0) (0 1 0 0)))
#S(maze :size 4 :data #2A((1 0 0 0) (1 0 0 0) (1 0 0 0) (0 1 0 0)))
経路探索はこのデータ構造じゃ面倒臭い気がするけど、
>>6 の hiroi 氏のページ見たら何とかなるんじゃね?
0027デフォルトの名無しさん
2007/06/13(水) 07:30:29(1 1 1 1 1 1 1 0 1)
(1 0 0 0 0 0 0 0 1)
(1 0 1 0 1 1 1 0 1)
(1 0 1 0 0 0 1 0 1)
(1 0 1 1 1 0 1 0 1)
(1 0 1 0 0 0 1 0 1)
(1 1 1 0 1 1 1 0 1)
(1 0 0 0 1 0 0 0 1)
(1 0 1 1 1 1 1 1 1)
↑のデータをテキストから読んで、構造体の中の配列に入れることができないです・・・
0028デフォルトの名無しさん
2007/06/13(水) 07:41:47発狂って何?
read 関数はS式単位で読み込めるので何も難しいこと無いと思うが、、
さては授業まったく聞いてないな?w
おれは仕事行くけど誰かこの駄目学生見てあげて、気が向いたらでいいw
0029デフォルトの名無しさん
2007/06/13(水) 07:47:49それぞれ座標固定でいいの?
(defstruct maze size data)
(defun load-maze (file)
(with-open-file (stream file :direction :input)
(let ((size (read stream)))
(make-maze :size size
:data (make-array (list size size)
:initial-contents (loop for data = (read stream nil :eof) until (eq data :eof) collect data))))))
(defun print-maze (maze &aux (size (maze-size maze)))
(loop for row below size do
(loop for col below size do
(princ (if (eq (aref (maze-data maze) row col) 1) "+" " ")))
(terpri)))
0030デフォルトの名無しさん
2007/06/13(水) 07:48:09って書こうと思ってやめたんですけど、発狂だけ残ってましたw
お察しの通り授業全く聞いておりませんでしたorz
一行ずつ配列に追加していこうと思ったんですが、consみたいに配列に追加していく関数もないし、どうすれば良いかわからない状況です
お仕事前にありがとうございました!
0031デフォルトの名無しさん
2007/06/13(水) 07:50:44int W(int x ,int y);
int a[9][9] ={
{1,1,1,1,1,1,1,0,1},
{1,0,0,0,0,0,0,0,1},
{1,0,1,0,1,1,1,0,1},
{1,0,1,0,0,0,1,0,1},
{1,0,1,1,1,0,1,0,1},
{1,0,1,0,0,0,1,0,1},
{1,1,1,0,1,1,1,0,1},
{1,0,0,0,1,0,0,0,1},
{1,0,1,1,1,1,1,1,1}
};
int main (void){
int hoge = 0;
hoge = W(1,1);
printf("%d¥n",hoge);
}
int W(int x, int y){
if(a[x][y]) return 0;
a[x][y] = 1;
return W(x,y-1)+W(x,y+1)+W(x-1,y)+W(x+1,y)+1;
}
C言語だけれど、できたじぇー。
コレをLISPに改造していけばOKなはず。
ちゃんと再帰を使ってるしね。
公立大学経済学部の力を見たカー!
003229
2007/06/13(水) 07:52:16はやくゴールとスタートの定義おしえてよ。急いでるんだろ?
003531
2007/06/13(水) 08:18:07一応考えを書いておくね。
もしa(x,y)が1ならば、行ける場所は0
そうでなければ、a(x,y)=1にして、周囲4近傍における合計値+1
それの再帰で行ける場所が求まるはずなんだけれど。
0036デフォルトの名無しさん
2007/06/13(水) 08:37:01ただ、loop for〜のくだりがこちらでは使えないんですが、どういうものなのか教えてもらえませんか?
003729
2007/06/13(水) 08:42:30(labels ((calc-step (pos n &aux (x (first pos)) (y (second pos)))
(cond ((or (< x 0) (< y 0) (>= x size) (>= y size)) :skip)
((or (= (aref (maze-data maze) x y) 1) (aref buffer x y)) :skip)
(t
(setf (aref buffer x y) n)
(calc-step (list (1+ x) y) (1+ n)) (calc-step (list x (1+ y)) (1+ n)) (calc-step (list (1- x) y) (1+ n)) (calc-step (list x (1- y)) (1+ n)))))
(find-path (pos n &aux (x (first pos)) (y (second pos)))
(cond ((or (< x 0) (< y 0) (>= x size) (>= y size)) :skip)
((or (= (aref (maze-data maze) x y) 1) (null (aref buffer x y))) :skip)
((= (aref buffer x y) n)
(push pos path)
(find-path (list (1+ x) y) (1- n)) (find-path (list x (1+ y)) (1- n)) (find-path (list (1- x) y) (1- n)) (find-path (list x (1- y)) (1- n))))))
(calc-step goal 1)
(let ((n (aref buffer (first start) (second start))))
(cond ((null n) (error ">_<"))
(t
(find-path start n)
(loop for x below size do
(loop for y below size
for wallp = (= (aref (maze-data maze) x y) 1)
for step = (member (list x y) path :test #'equal) do
(princ (cond (wallp "+")
((null step) " ")
(t "*"))))
(terpri))
(write-line "Solved!"))))))
003829
2007/06/13(水) 08:44:18環境は何なの?今時の Common Lisp で LOOP が無い環境なんてあるの?
003929
2007/06/13(水) 08:46:020040デフォルトの名無しさん
2007/06/13(水) 08:47:13loopは大丈夫なんですけど、forのところで引っかかるみたいなんです
0041デフォルトの名無しさん
2007/06/13(水) 08:49:04004229
2007/06/13(水) 08:51:56LOOP FOR ... は 20 年以上前の ANSI Common Lisp で規格に入った機能。それ以前の
処理系には LOOP FOR はない。(ただの LOOP はある)
CLISP, GCL, SBCL, ABCL, ECL, LispWorks, ACL で LOOP FOR が使えない環境なんてないぞ。
しぬほど古いバージョンの GCL でも使ってるのか?
0043デフォルトの名無しさん
2007/06/13(水) 08:53:07004429
2007/06/13(水) 08:58:26うーむ。じゃあ do に直して使って。この書換えはなんか参考書とか教科書とか。
(loop for data = (read stream nil :eof) until (eq data :eof) collect data)
↓
(do ((data (read stream nil :eof) (read stream nil :eof))
(lst nil (cons data lst)))
((eq data :eof)
(reverse lst)))
(loop for x below size do (princ x))
↓
(do ((x 0 (1+ x)))
((>= x size))
(princ x))
0045デフォルトの名無しさん
2007/06/13(水) 08:58:530046デフォルトの名無しさん
2007/06/13(水) 09:05:40今日の課題を出せば少し暇になるのでまた見直して勉強させて頂きます!
004729
2007/06/13(水) 09:23:45歩数マップを作って解く形式だったが、本当はスタートから辿っていくほうがいいのかもしれないなぁ。
別のやり方を考えてみるのもいいと思う。あとは 37 のイケてない所をチェックして直すとかね。
0048デフォルトの名無しさん
2007/06/13(水) 09:54:53他の人のプログラムの書き方を見ることができたのは本当にためになりました
ありがとうございます!
0049デフォルトの名無しさん
2007/06/13(水) 11:51:29スタートとゴールがそれぞれ上と下にしかない &
Lispということを考えると再帰使って式書けばFizzBuzz並みに簡単だと思うがね。
0050デフォルトの名無しさん
2007/06/13(水) 12:01:090051デフォルトの名無しさん
2007/06/13(水) 16:08:44教官の狙いはa-bを解ければ合格でcを解いたらBランク。dを解いたらAランクの
評価を与えるのだろう。初心者が解けなくて当然だと思ってよいかもね。
授業で非決定性をやってるかどうか知らないけど、それ以外の方法も含めて
授業でやった事が大きなヒントになってるよ。スキームな人ならcall/ccを
使いそうな気がするね。clでもon lispをみればcall/ccはできる。
0052デフォルトの名無しさん
2007/06/13(水) 16:53:320053デフォルトの名無しさん
2007/06/13(水) 19:33:180054デフォルトの名無しさん
2007/06/13(水) 20:04:03それは一応確認した。豊富な知識(と思ってる)のかしらないけど、
いろんな事は検討してみましたがね。
52や53のような輩にレスを返しても荒れるだけだったな。2ちゃんならではの
このての人種とは関わりたく無い
では失礼。
0055デフォルトの名無しさん
2007/06/13(水) 20:05:500056デフォルトの名無しさん
2007/06/13(水) 22:10:46手抜きで C の課題をそのまま lisp にしたのかな?
0057デフォルトの名無しさん
2007/06/13(水) 22:15:25ランダムアクセスするし。いちいちリストたぐるなんて無駄じゃん。
この例でわざわざリストを使うなんて CL としてはありえないだろう。
0058デフォルトの名無しさん
2007/06/13(水) 22:15:45解くときはランダムアクセスが必要だろうから配列のほうが速いし
0059デフォルトの名無しさん
2007/06/13(水) 22:35:18配列の方が早いのは勿論分かるけど、宿題レベルだと関係なくない?
>>27 なんてデータを配列に読み込むだけで挫折してるわけだし。
0060デフォルトの名無しさん
2007/06/13(水) 22:41:53006131
2007/06/13(水) 22:48:45>>>31 のコードは何をしてるのか気になる
えっと、斜めには進めないと考えて、
もしa(x,y)が1ならば、行ける場所は0(壁だから)
そうでなければ、a(x,y)=1にして、周囲4近傍における合計値+1
それの再帰で、最終的にマスすべてをしらみつぶしに調べて
行ける場所(進めるマスの総計)が求まる
はずなんだけれどなぁ、と深く考えずに書いてしまいました。
正直スマンカッタ。
でも、こんな感じの考え方を進めていけばいいんじゃないかなぁと思ったんです。
0062デフォルトの名無しさん
2007/06/13(水) 23:44:57「配列の勉強に対する宿題かも」ぐらいの想像力があってもいいと思うんだが。
006329
2007/06/14(木) 00:05:31朝のプログラム歩数マップ(ゲームなんかで移動範囲がピコーンって光るやつみたいな)を作成してから、目的地へのルートを撰択するのね。
で、↓がスタート地点から総当たりでルートを探索してゆく(カベにぶつかったり戻ったりはナシのほうこうで)。
途中の通った経路をどんどん覚えていってゴールまでの全ルートを列挙。最後に最短のものを選ぶ。
(defun print-maze (maze &optional path &aux (size (maze-size maze)))
(loop for row below size do
(loop for col below size do
(princ (cond ((eq (aref (maze-data maze) row col) 1) "+")
((member (list row col) path :test #'equal) "*")
(t " "))))
(terpri)))
(defun solve-maze-2 (maze &aux (start '(8 1)) (goal '(0 7)) (data (maze-data maze)) (size (maze-size maze)))
(labels ((find-path (path pos &aux (x (first pos)) (y (second pos)))
(cond ((or (< x 0) (< y 0) (>= x size) (>= y size) (= (aref data x y) 1) (member pos path :test #'equal)) nil)
((equal pos goal) (list (cons pos path)))
(t
(mapcan #'(lambda (d)
(destructuring-bind (dx dy) d
(find-path (cons pos path) (list (+ x dx) (+ y dy)))))
'((1 0) (-1 0) (0 1) (0 -1)))))))
(let ((found (find-path nil start)))
(if (null found) "経路が見つかりません!! >_<" (print-maze maze (first (sort found #'< :key #'length)))))))
006429
2007/06/14(木) 00:06:42006529
2007/06/14(木) 00:13:15おしかったのは行ける方向を数値にして足しちゃうと経路として使えないんだよね。
座標を覚えておくか、歩数マップみたいに移動コストを計算して最短経路を選ぶかすれば正解だった。
0066CLer
2007/06/14(木) 01:02:39イイ線いっていないと思うんですが……。
31の回答で(解けていなくて)惜しい点というのが、
最短経路を求める問題そのものなのではないですか?
だいたい、31の方法ではある座標をすでに通過したかどうかが判定できず、
いつまでも同じところを巡回する可能性がありませんか? というか……、
この再帰は抜けられるんですかね……。
006765
2007/06/14(木) 01:24:34ここがわかればあとは条件を足すだけじゃん。壁チェックはしてあるから
1. 同じところでいったりきたりしない工夫 (経路を覚えるとかマップにマークするとか)
2. ゴールで止まる
の二点が不足してただけ。配列を一回り大きくして外側を全部壁で囲っちゃえば座標チェックは省略できるしー。
31 のままじゃ無限ループに陥いって抜けられないけど、俺は評価したいね。
俺が C しか知らなかった頃には再帰的な探索なんて考えつかなっただろうという個人的理由が大きいけど。
0068デフォルトの名無しさん
2007/06/14(木) 03:00:42文字列のcar, cdr見たいなことをしたいっす.
0069デフォルトの名無しさん
2007/06/14(木) 03:20:00(subseq "ABC" 0 1) => "A"
(subseq "ABC" 1) => "BC"
0070デフォルトの名無しさん
2007/06/14(木) 04:28:35ありがとうございます
もう一つ質問させてください
Lispってループを抜けるC言語で言うbreak見たいな
ものってないんですか?
0071デフォルトの名無しさん
2007/06/14(木) 06:40:33(return sum)
と書けばループを抜けて、loopの値がsumとなります
(return)
だけだとloopの値はnilになります
0072デフォルトの名無しさん
2007/06/14(木) 09:01:45インデントはスペースだけにしたいんだけど、誰か何とかする方法知らない?
余談:
emacsでCを編集したらインデントにタブとスペースの両方使われて、
vimでCを編集したらインデントはタブだけが使われたはず。
なんでlispだと逆転するのかね……
0073デフォルトの名無しさん
2007/06/14(木) 09:31:31聞くとしてもスレ違い。
0074デフォルトの名無しさん
2007/06/14(木) 15:07:33スレチだけど、EmacsのCの編集でスペースで統一するのはc-mode-common-hookあたりで
(setq indent-tabs-mode nil)すればよろし。
0075デフォルトの名無しさん
2007/06/14(木) 16:02:36(defun read-maze (filename)
(reverse
(with-open-file (s filename)
(let* ((size (read s)) m)
(dotimes (cnt size m) (setq m (cons (read s) m)))))))
(defun print-maze-1 (row)
(format t "~&~A~%"
(loop for b in row collect (elt '(#¥. #¥X #¥Space) b))))
(defun print-maze (maze)
(loop for row in maze do (print-maze-1 row)))
(defun wall (maze x y) (elt (elt maze y) x))
(defun count-ways (maze x y)
(case (wall maze x y)
(1 nil) (2 t)
(otherwise
(loop for dx in '(0 -1 1 0)
for dy in '(-1 0 0 1)
count (zerop (wall maze (+ x dx) (+ y dy)))))))
(defun solve-maze-1 (maze)
(append (list (first maze))
(loop for y from 1 to (- (length maze) 2)
collect (append '(1)
(loop for x from 1 to (- (length (car maze)) 2)
collect (case (count-ways maze x y)
((NIL) 1) ((0 1 t) 2) ((2 3) 0)))
'(1)))
(last maze)))
(defun solve-maze (maze)
(let ((m (solve-maze-1 maze))) (if (equal m maze) m (solve-maze m))))
007675
2007/06/14(木) 16:59:33Slimeの操作の練習を兼ねて作ってみますた。
本題と違いますけどSlime便利ですね。
0077デフォルトの名無しさん
2007/06/15(金) 06:53:25(cons "aaa" (cons "bbb" "ccc"))
ってやると
("aaa" "bbb" . "ccc")
こうなっちゃいます...
これを
("aaa" "bbb" "ccc")
こうしたいんですが...
すみませんくだらない質問で,どなたかは教えてください...
0078デフォルトの名無しさん
2007/06/15(金) 07:03:00> ってやると
> ("aaa" "bbb" . "ccc")
> こうなっちゃいます...
当然だろ。何の不思議もない。
> これを
> ("aaa" "bbb" "ccc")
> こうしたいんですが...
(cons "aaa" (list "bbb" "ccc"))
(cons "aaa" (cons "bbb" (cons "ccc" '())))
0079デフォルトの名無しさん
2007/06/15(金) 07:21:10最近はたくさんいそうだな。
0080デフォルトの名無しさん
2007/06/15(金) 07:29:42すみません,もう一つ質問させてください
(setf foo (list "aaa" "bbb"))
(cons "aaa" foo)
(cons "bbb" foo)
(cons "ccc" foo))
consの説明を読むと,2番目の引数がListであれば先頭に一つ要素を追加してゆく
と書かれているので,私としては.
最終的に
("ccc" "bbb" "aaa" "aaa" "bbb")
と成るはずだと思ったのですが.
実際にやってみると
("ccc" "aaa" "bbb")
となってしまいます.
ということは
「2番目の引数がListであれば先頭に一つ要素を追加してゆく」というのは
本の間違いですか?
0081デフォルトの名無しさん
2007/06/15(金) 07:38:12cons は先頭に追加する、んじゃないよ。新しいのを返す。
元々の foo は setq しないと変更されないよ。
0082デフォルトの名無しさん
2007/06/15(金) 07:58:37なるほど,よくわかりました
0083デフォルトの名無しさん
2007/06/15(金) 17:08:070084デフォルトの名無しさん
2007/06/16(土) 03:14:440085デフォルトの名無しさん
2007/06/16(土) 05:03:08java,c++,等ならパッケージ、ライブラリなどから必要そうなクラスの名前がだいたい検討がつくのですが
関数一覧から探すのはちょいとしんどいです。
なにかカテゴリー分けされた辞書みたいなものは無いものでしょうか?
0086デフォルトの名無しさん
2007/06/16(土) 07:44:04HyperSpec はまさに辞書だけど駄目?
ttp://www.lisp.org/HyperSpec/FrontMatter/Chapter-Index.html
クックブックもあるよ。
ttp://cl-cookbook.sourceforge.net/
おれはようやくHyperSpecの引きかたに慣れてきたよ。やっぱ辞書は
手に馴染むと便利だね。
0087デフォルトの名無しさん
2007/06/16(土) 09:36:29ソースのエラー発生箇所をそのまま出力させる事はできないですか?
0088デフォルトの名無しさん
2007/06/16(土) 09:43:110089デフォルトの名無しさん
2007/06/16(土) 11:13:50を計算する関数 root を,初期値を 1.0 かつ err を 0.1 としニュートン法を用いて定義したんですが、うまく作動しません。
>(root 5 5)とか入力します
(defun absolute (x)
(cond ((< x 0) (- 0 x))
((= x 0) 0)
((> x 0) x)))
(defun near (a b err)
(< (absolute (- a b)) err))
(defun betterpwr (x m c)
(+ (* (- 1 (/ 1.0 m)) x)
(/ (+ c 0.0)
(* m (mypwr x (- m 1))))))
(defun root-core (c m x err)
(if (near c (mypwr x m) err)
x
(root-core c m (betterpwr x m c) err)))
(defun root (c m)
(root-core c m 1.0 0.1))
間違っている点はありますか?
0090デフォルトの名無しさん
2007/06/16(土) 11:17:340091デフォルトの名無しさん
2007/06/16(土) 11:26:06mypwr入れ忘れてた orz
0092デフォルトの名無しさん
2007/06/16(土) 11:50:30おお、ありがたい、これのローカル参照可能な版があればもっとありがたいです。
15MB,2300fileもあってwgetするのも気が引けるし。
なにより普段からIPリーチャブルじゃないので。
0093デフォルトの名無しさん
2007/06/16(土) 12:10:48どうも、では読んでみます。
0094デフォルトの名無しさん
2007/06/16(土) 12:44:06ttp://www.lispworks.com/downloads/documentation.html
Emacs+SLIMEという環境だけど、ポイント位置のシンボル拾って
hyperspecを引くコマンドもあって便利すぎます><
0095デフォルトの名無しさん
2007/06/16(土) 12:51:44ひょっとして手元にない人も多いのか? LispWorks や Allegro 入れると一緒に入って
ヘルプコマンドが引いてくれるんだよね。フリーの CL でも SLIME から引ける。
http://www.lispworks.com/documentation/common-lisp.html
lispuser.net で配布されてる clisp + slime のやつもローカルのを引くのが推奨みたいよ。
↓は附属の .emacs から抜粋。俺は Win じゃないんで試してないが、IE が起動するのかな?
(require 'hyperspec)
(setq common-lisp-hyperspec-root
(concat "file://" (expand-file-name "~/doc/HyperSpec/"))
common-lisp-hyperspec-symbol-table
(expand-file-name "~/doc/HyperSpec/Data/Map_Sym.txt"))
0096デフォルトの名無しさん
2007/06/16(土) 13:04:44岩波の Common Lisp 入門って ANSI 以前の CLtL の頃の本じゃなかったっけ?
一通り読んだら ANSI Common Lisp あたりに手を出すのが良いと思う。
0097デフォルトの名無しさん
2007/06/17(日) 01:02:16岩波 livejournal lisp でググって見て。
良い点と悪い点がかかれてるページに出くわすから。
0098デフォルトの名無しさん
2007/06/17(日) 12:50:59あれを出さないようにはできないんでしょうか?sb-executableで実行形式にコンパイルすれば
でないのかなとか思ってやってみましたが、実行形式でも出ちゃいます。
0099デフォルトの名無しさん
2007/06/17(日) 15:00:18--noinform
を付けると出ないようになると思います
ttp://www.sbcl.org/manual/Command-Line-Options.html
010098
2007/06/18(月) 21:59:330101デフォルトの名無しさん
2007/06/18(月) 22:42:54遅くて困ってます。
with-open-file で開いて普通に read-line で読んでシェルのwlとかgrepみたいな
事をしているのですが、 perl の方が早いんです…コンパイルしてるのに…orz
何か良い方法ないですか?
■ このスレッドは過去ログ倉庫に格納されています