【入門】Common Lisp その3【質問よろず】

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
lispを触ってみたい入門者のQ&A
初心者の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))
2 ◆3.JjF77I26 :2007/06/10(日) 23:08:04
2get
3デフォルトの名無しさん:2007/06/10(日) 23:51:57
(apply #'乙 (>> 1))
4デフォルトの名無しさん:2007/06/11(月) 00:12:46
((お勧めの Common Lisp 処理系)
(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なら多少扱える。)
:特徴 元々商用のコンパイラ。ネイティブスレッドが使える。))
5デフォルトの名無しさん: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の系譜))
6デフォルトの名無しさん:2007/06/11(月) 00:22:38
7デフォルトの名無しさん:2007/06/11(月) 00:24:18
8デフォルトの名無しさん: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 の 参考書を探しているならこれ一択))
9デフォルトの名無しさん:2007/06/11(月) 00:29:13
テンプレコピー終了。lispdoc.comや洋書pdf/hpをくわえた。あとは、on lisp
が和書として登場した事も記しておかないと。
10デフォルトの名無しさん:2007/06/11(月) 00:38:53
乙。
テンプレに Allegro って入ってないのね。商用だから?
11デフォルトの名無しさん:2007/06/11(月) 00:44:52
触った事がないからくわえ忘れた。
商用CL
http://jp.franz.com/index.html
free downloadから登録して使えるらしい
http://www.lispworks.com/downloads/index.html
IDEがついているらしい
12デフォルトの名無しさん:2007/06/11(月) 01:53:11
┌────────────┐
|scheme自重しろww ちょww|
|   ↑自重(ry             |
|ーかそれはないだろww    |
|                  |
|                  |
|                  |
|   リリカルは俺の嫁。   .|
└────────────┘
13デフォルトの名無しさん:2007/06/13(水) 03:41:07
すいません、明日提出の課題で完全に煮詰まってしまってもう何も浮かんできません
どなたか教えていただけないでしょうか
14デフォルトの名無しさん:2007/06/13(水) 03:42:31
どうぞ。
15デフォルトの名無しさん:2007/06/13(水) 03:43:21
ありがとうございます。
16デフォルトの名無しさん:2007/06/13(水) 03:44:03
はやくしろ。
17デフォルトの名無しさん:2007/06/13(水) 03:45:50
まだか?
18デフォルトの名無しさん:2007/06/13(水) 03:46:37
やっぱりもう寝る。
俺のほかにも、少なくとも1人居るみたいだから任せた。
19デフォルトの名無しさん:2007/06/13(水) 04:07:51
申し訳ありません!お待たせしました

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)

上記のようなデータが入ったテキストファイルを読み込んで、迷路を解くという問題です
最初の数字が迷路のサイズを表していて、ここでは9なので9*9です
1が壁、0が道となっています

20デフォルトの名無しさん:2007/06/13(水) 04:09:07
次の手順を追って作成するようになっています

a.迷路ストラクチャを定義せよ.迷路ストラクチャは,迷路のサイズ(整数値)と迷路の形状データ(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)))

21デフォルトの名無しさん:2007/06/13(水) 04:10:06
.迷路ストラクチャを引数に受け取り,迷路のデータを表示する関数 print-maze を定義せよ
>(setq m (load-maze "m9.txt"))
>(print-maze m)
■■■■■■■ ■
■       ■
■ ■ ■■■ ■
■ ■   ■ ■
■ ■■■ ■ ■
■ ■   ■ ■
■■■ ■■■ ■
■   ■   ■
■ ■■■■■■■

NIL

d.迷路データファイルを入力として受け取り,スタートからゴールまでの最短パスを出力する関数 solve-maze を作成せよ.プログラムがなるべく読みやすくなるよう作成すること
>(solve-maze "m9.txt")
■■■■■■■*■
■  *****■
■ ■*■■■ ■
■ ■***■ ■
■ ■■■*■ ■
■ ■***■ ■
■■■*■■■ ■
■***■   ■
■*■■■■■■■

Solved!
NIL
22デフォルトの名無しさん:2007/06/13(水) 04:11:17
すいません、迷路が上手く書けませんでした
23デフォルトの名無しさん:2007/06/13(水) 06:33:33
まずは教官に「宿題をやってなかったので提出期限を一週間延ばしてください」と
お願いにいくところから始めよう。
24デフォルトの名無しさん:2007/06/13(水) 07:01:01
難しいな。
見た事あるけれど、たしか、プログラミングコンテストの問題だった気がする。
本があったかなぁ?
25デフォルトの名無しさん:2007/06/13(水) 07:10:08
プロコンですか・・・解ける気が全くしないですorz
26デフォルトの名無しさん:2007/06/13(水) 07:13:40
朝っぱらから楽しげだなw
cl-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 氏のページ見たら何とかなるんじゃね?
27デフォルトの名無しさん:2007/06/13(水) 07:30:29
発狂hiroiさんのページを見せてもらったんですが、やっぱりダメみたいです

(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)

↑のデータをテキストから読んで、構造体の中の配列に入れることができないです・・・
28デフォルトの名無しさん:2007/06/13(水) 07:41:47
>>27
発狂って何?
read 関数はS式単位で読み込めるので何も難しいこと無いと思うが、、
さては授業まったく聞いてないな?w

おれは仕事行くけど誰かこの駄目学生見てあげて、気が向いたらでいいw
29デフォルトの名無しさん: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)))
30デフォルトの名無しさん:2007/06/13(水) 07:48:09
発狂しそうです
って書こうと思ってやめたんですけど、発狂だけ残ってましたw
お察しの通り授業全く聞いておりませんでしたorz
一行ずつ配列に追加していこうと思ったんですが、consみたいに配列に追加していく関数もないし、どうすれば良いかわからない状況です
お仕事前にありがとうございました!
31デフォルトの名無しさん:2007/06/13(水) 07:50:44
#include <stdio.h>
int 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なはず。
ちゃんと再帰を使ってるしね。
公立大学経済学部の力を見たカー!
3229:2007/06/13(水) 07:52:16
ほほう、近年稀にみる素直さだな。バレバレの嘘よりは好ましい。
はやくゴールとスタートの定義おしえてよ。急いでるんだろ?
33デフォルトの名無しさん:2007/06/13(水) 07:54:51
>>29さんも>>30さんもありがとうございます
スタートが左下、ゴールは右上となっています
34デフォルトの名無しさん:2007/06/13(水) 07:56:17
>>30じゃなくて>>31さんです、すいません!
3531:2007/06/13(水) 08:18:07
なんかダメダメっぽい。
一応考えを書いておくね。
もしa(x,y)が1ならば、行ける場所は0
そうでなければ、a(x,y)=1にして、周囲4近傍における合計値+1
それの再帰で行ける場所が求まるはずなんだけれど。
36デフォルトの名無しさん:2007/06/13(水) 08:37:01
そうですか、でも>>29のところまででも凄いタメになりました!
ただ、loop for〜のくだりがこちらでは使えないんですが、どういうものなのか教えてもらえませんか?
3729:2007/06/13(水) 08:42:30
(defun solve-maze (maze &aux (start '(8 1)) (goal '(0 7)) (size (maze-size maze)) (buffer (make-array (list size size) :initial-element nil)) (path nil))
(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!"))))))
3829:2007/06/13(水) 08:44:18
途中で、経路複数とか考えるの止めたのでちょっと冗長だが…って、 LOOP がエラー?
環境は何なの?今時の Common Lisp で LOOP が無い環境なんてあるの?
3929:2007/06/13(水) 08:46:02
むしろ俺がそちらの環境を教えてくださいませんか?というキブン。
40デフォルトの名無しさん:2007/06/13(水) 08:47:13
こんなに長いプログラム作ってくださって本当にありがとうございます
loopは大丈夫なんですけど、forのところで引っかかるみたいなんです
41デフォルトの名無しさん:2007/06/13(水) 08:49:04
環境はGnu Common Lispというものみたいです
4229:2007/06/13(水) 08:51:56
だーから使ってる Lisp 環境を教えろって。それが古すぎるんじゃないか?
LOOP FOR ... は 20 年以上前の ANSI Common Lisp で規格に入った機能。それ以前の
処理系には LOOP FOR はない。(ただの LOOP はある)
CLISP, GCL, SBCL, ABCL, ECL, LispWorks, ACL で LOOP FOR が使えない環境なんてないぞ。
しぬほど古いバージョンの GCL でも使ってるのか?
43デフォルトの名無しさん:2007/06/13(水) 08:53:07
死ぬほど古いバージョンのGCLのようですorz
4429:2007/06/13(水) 08:58:26
あれ? GCL か? -ansi オプションとかそんなんついていない?
うーむ。じゃあ 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))
45デフォルトの名無しさん:2007/06/13(水) 08:58:53
といってもバージョンは(2.4.0)みたいです・・・
46デフォルトの名無しさん:2007/06/13(水) 09:05:40
何から何までありがとうございます
今日の課題を出せば少し暇になるのでまた見直して勉強させて頂きます!
4729:2007/06/13(水) 09:23:45
せっかく払った授業料だ。元が取れるようにガンバレよ。今からならまだ遅れも取り戻せるだろう。
歩数マップを作って解く形式だったが、本当はスタートから辿っていくほうがいいのかもしれないなぁ。
別のやり方を考えてみるのもいいと思う。あとは 37 のイケてない所をチェックして直すとかね。
48デフォルトの名無しさん:2007/06/13(水) 09:54:53
3・4週間前までは課題も楽しくできてたんですが、少し遅れてしまったようです
他の人のプログラムの書き方を見ることができたのは本当にためになりました
ありがとうございます!
49デフォルトの名無しさん:2007/06/13(水) 11:51:29
>>24
スタートとゴールがそれぞれ上と下にしかない &
Lispということを考えると再帰使って式書けばFizzBuzz並みに簡単だと思うがね。
50デフォルトの名無しさん:2007/06/13(水) 12:01:09
>>31 のコードは何をしてるのか気になる
51デフォルトの名無しさん:2007/06/13(水) 16:08:44
迷路を解く問題って非決定性のアルゴリズムを使う必要があるんじゃないの?
教官の狙いはa-bを解ければ合格でcを解いたらBランク。dを解いたらAランクの
評価を与えるのだろう。初心者が解けなくて当然だと思ってよいかもね。

授業で非決定性をやってるかどうか知らないけど、それ以外の方法も含めて
授業でやった事が大きなヒントになってるよ。スキームな人ならcall/ccを
使いそうな気がするね。clでもon lispをみればcall/ccはできる。
52デフォルトの名無しさん:2007/06/13(水) 16:53:32
しらみつぶしで簡単に求まる問題でしょ。非決定性なんて必要ないよ。
53デフォルトの名無しさん:2007/06/13(水) 19:33:18
>>51 は、自分の豊富な (と思ってる) 知識を披露しただけだろ。
54デフォルトの名無しさん:2007/06/13(水) 20:04:03
fizzbuzz並みに簡単かどうか別として、再帰を利用すれば解ける問題だった。
それは一応確認した。豊富な知識(と思ってる)のかしらないけど、
いろんな事は検討してみましたがね。

52や53のような輩にレスを返しても荒れるだけだったな。2ちゃんならではの
このての人種とは関わりたく無い
では失礼。
55デフォルトの名無しさん:2007/06/13(水) 20:05:50
日本人じゃなかったみたいだな
56デフォルトの名無しさん:2007/06/13(水) 22:10:46
何で list じゃなくて二次元配列なんだろ。
手抜きで C の課題をそのまま lisp にしたのかな?
57デフォルトの名無しさん:2007/06/13(水) 22:15:25
え??マップは二次元データだから二次元配列でいいじゃん。
ランダムアクセスするし。いちいちリストたぐるなんて無駄じゃん。
この例でわざわざリストを使うなんて CL としてはありえないだろう。
58デフォルトの名無しさん:2007/06/13(水) 22:15:45
縦と横の操作の対称性を考えると配列のほうがベターじゃね?
解くときはランダムアクセスが必要だろうから配列のほうが速いし
59デフォルトの名無しさん:2007/06/13(水) 22:35:18
>>57, 58
配列の方が早いのは勿論分かるけど、宿題レベルだと関係なくない?
>>27 なんてデータを配列に読み込むだけで挫折してるわけだし。
60デフォルトの名無しさん:2007/06/13(水) 22:41:53
簡単にできたら宿題の意味が無いかも
6131:2007/06/13(水) 22:48:45
>>50
>>>31 のコードは何をしてるのか気になる
えっと、斜めには進めないと考えて、
もしa(x,y)が1ならば、行ける場所は0(壁だから)
そうでなければ、a(x,y)=1にして、周囲4近傍における合計値+1
それの再帰で、最終的にマスすべてをしらみつぶしに調べて
行ける場所(進めるマスの総計)が求まる
はずなんだけれどなぁ、と深く考えずに書いてしまいました。
正直スマンカッタ。
でも、こんな感じの考え方を進めていけばいいんじゃないかなぁと思ったんです。
62デフォルトの名無しさん:2007/06/13(水) 23:44:57
>>59
「配列の勉強に対する宿題かも」ぐらいの想像力があってもいいと思うんだが。
6329: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)))))))
6429:2007/06/14(木) 00:06:42
age ちった…。で、おそらくこれが 31 が示そうとしたコードかなと思った。
6529:2007/06/14(木) 00:13:15
何度もすまん、>>61 にイイ線いってたよと言いたかった。風邪ひいてボケてるな。
おしかったのは行ける方向を数値にして足しちゃうと経路として使えないんだよね。
座標を覚えておくか、歩数マップみたいに移動コストを計算して最短経路を選ぶかすれば正解だった。
66CLer:2007/06/14(木) 01:02:39
>65
イイ線いっていないと思うんですが……。
31の回答で(解けていなくて)惜しい点というのが、
最短経路を求める問題そのものなのではないですか?
だいたい、31の方法ではある座標をすでに通過したかどうかが判定できず、
いつまでも同じところを巡回する可能性がありませんか? というか……、
この再帰は抜けられるんですかね……。
6765:2007/06/14(木) 01:24:34
周囲を再帰的に探索していくという点が最初の壁だと思うから着眼点はいいと思うよ。
ここがわかればあとは条件を足すだけじゃん。壁チェックはしてあるから
1. 同じところでいったりきたりしない工夫 (経路を覚えるとかマップにマークするとか)
2. ゴールで止まる
の二点が不足してただけ。配列を一回り大きくして外側を全部壁で囲っちゃえば座標チェックは省略できるしー。
31 のままじゃ無限ループに陥いって抜けられないけど、俺は評価したいね。
俺が C しか知らなかった頃には再帰的な探索なんて考えつかなっただろうという個人的理由が大きいけど。
68デフォルトの名無しさん:2007/06/14(木) 03:00:42
文字列の最初の一文字を返すのと,それ以外の部分を返す関数ってないっすか?
文字列のcar, cdr見たいなことをしたいっす.
69デフォルトの名無しさん:2007/06/14(木) 03:20:00
>>68
(subseq "ABC" 0 1) => "A"
(subseq "ABC" 1) => "BC"
70デフォルトの名無しさん:2007/06/14(木) 04:28:35
>>69
ありがとうございます
もう一つ質問させてください
Lispってループを抜けるC言語で言うbreak見たいな
ものってないんですか?
71デフォルトの名無しさん:2007/06/14(木) 06:40:33
リターンを使えば抜けれますよ、sumっていう変数があるとすると
(return sum)
と書けばループを抜けて、loopの値がsumとなります
(return)
だけだとloopの値はnilになります
72デフォルトの名無しさん :2007/06/14(木) 09:01:45
vimでlisp書いてるんだけど、インデントにスペースとタブの両方が使われる。
インデントはスペースだけにしたいんだけど、誰か何とかする方法知らない?

余談:
emacsでCを編集したらインデントにタブとスペースの両方使われて、
vimでCを編集したらインデントはタブだけが使われたはず。
なんでlispだと逆転するのかね……
73デフォルトの名無しさん:2007/06/14(木) 09:31:31
vim tab space でググるくらいはしたらどうか。
聞くとしてもスレ違い。
74デフォルトの名無しさん:2007/06/14(木) 15:07:33
>>72
スレチだけど、EmacsのCの編集でスペースで統一するのはc-mode-common-hookあたりで
(setq indent-tabs-mode nil)すればよろし。
75デフォルトの名無しさん:2007/06/14(木) 16:02:36
(defpackage :maze (:use :common-lisp))
(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))))
7675:2007/06/14(木) 16:59:33
LISP勉強中の素人ですが
Slimeの操作の練習を兼ねて作ってみますた。
本題と違いますけどSlime便利ですね。
77デフォルトの名無しさん:2007/06/15(金) 06:53:25
ちょっと質問なんですが

(cons "aaa" (cons "bbb" "ccc"))
ってやると
("aaa" "bbb" . "ccc")
こうなっちゃいます...
これを
("aaa" "bbb" "ccc")
こうしたいんですが...

すみませんくだらない質問で,どなたかは教えてください...
78デフォルトの名無しさん:2007/06/15(金) 07:03:00
> (cons "aaa" (cons "bbb" "ccc"))
> ってやると
> ("aaa" "bbb" . "ccc")
> こうなっちゃいます...

当然だろ。何の不思議もない。

> これを
> ("aaa" "bbb" "ccc")
> こうしたいんですが...

(cons "aaa" (list "bbb" "ccc"))
(cons "aaa" (cons "bbb" (cons "ccc" '())))
79デフォルトの名無しさん:2007/06/15(金) 07:21:10
cons cellとか知らないままlisp使ってる人も
最近はたくさんいそうだな。
80デフォルトの名無しさん:2007/06/15(金) 07:29:42
>>78
すみません,もう一つ質問させてください
(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であれば先頭に一つ要素を追加してゆく」というのは
本の間違いですか?
81デフォルトの名無しさん:2007/06/15(金) 07:38:12
>>80
cons は先頭に追加する、んじゃないよ。新しいのを返す。
元々の foo は setq しないと変更されないよ。
82デフォルトの名無しさん:2007/06/15(金) 07:58:37
>>81
なるほど,よくわかりました
83デフォルトの名無しさん:2007/06/15(金) 17:08:07
岩波の「Common Lisp 入門」って良いですか?
84デフォルトの名無しさん:2007/06/16(土) 03:14:44
良いかどうかはわかんないですけど学校の教科書にはなっとります
85デフォルトの名無しさん:2007/06/16(土) 05:03:08
Lisp関数の探し方というか絞り込み方がよくわかりません。
java,c++,等ならパッケージ、ライブラリなどから必要そうなクラスの名前がだいたい検討がつくのですが
関数一覧から探すのはちょいとしんどいです。
なにかカテゴリー分けされた辞書みたいなものは無いものでしょうか?

86デフォルトの名無しさん:2007/06/16(土) 07:44:04
>>85
HyperSpec はまさに辞書だけど駄目?
ttp://www.lisp.org/HyperSpec/FrontMatter/Chapter-Index.html
クックブックもあるよ。
ttp://cl-cookbook.sourceforge.net/

おれはようやくHyperSpecの引きかたに慣れてきたよ。やっぱ辞書は
手に馴染むと便利だね。
87デフォルトの名無しさん:2007/06/16(土) 09:36:29
ACL で、:zoom によるトレース結果ではなくて、
ソースのエラー発生箇所をそのまま出力させる事はできないですか?
88デフォルトの名無しさん:2007/06/16(土) 09:43:11
>>86 このクックブックはいいね〜。
89デフォルトの名無しさん:2007/06/16(土) 11:13:50
任意の正実数 c,および,2 以上の任意の整数 m が仮引数として与えられたとき c の m 乗根
を計算する関数 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))

間違っている点はありますか?
90デフォルトの名無しさん:2007/06/16(土) 11:17:34
なんかみにくいですねすいません。インデントがうまく反映されませんでした
91デフォルトの名無しさん:2007/06/16(土) 11:26:06
あ、解決しました
mypwr入れ忘れてた orz
92デフォルトの名無しさん:2007/06/16(土) 11:50:30
>>86
おお、ありがたい、これのローカル参照可能な版があればもっとありがたいです。

15MB,2300fileもあってwgetするのも気が引けるし。
なにより普段からIPリーチャブルじゃないので。




93デフォルトの名無しさん:2007/06/16(土) 12:10:48
>>84
どうも、では読んでみます。
94デフォルトの名無しさん:2007/06/16(土) 12:44:06
>>92
ttp://www.lispworks.com/downloads/documentation.html
Emacs+SLIMEという環境だけど、ポイント位置のシンボル拾って
hyperspecを引くコマンドもあって便利すぎます><
95デフォルトの名無しさん:2007/06/16(土) 12:51:44
>>92
ひょっとして手元にない人も多いのか? 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"))
96デフォルトの名無しさん:2007/06/16(土) 13:04:44
>>83
岩波の Common Lisp 入門って ANSI 以前の CLtL の頃の本じゃなかったっけ?
一通り読んだら ANSI Common Lisp あたりに手を出すのが良いと思う。
97デフォルトの名無しさん:2007/06/17(日) 01:02:16
>>83
岩波 livejournal lisp でググって見て。
良い点と悪い点がかかれてるページに出くわすから。
98デフォルトの名無しさん:2007/06/17(日) 12:50:59
sbclを使っています。requireを使うと、標準出力にぞろぞろとメッセージが出ますが
あれを出さないようにはできないんでしょうか?sb-executableで実行形式にコンパイルすれば
でないのかなとか思ってやってみましたが、実行形式でも出ちゃいます。
99デフォルトの名無しさん:2007/06/17(日) 15:00:18
>>98
--noinform
を付けると出ないようになると思います
ttp://www.sbcl.org/manual/Command-Line-Options.html
10098:2007/06/18(月) 21:59:33
--noinformは付けてましたが、それでも出てしまいます・・・。
101デフォルトの名無しさん:2007/06/18(月) 22:42:54
ACL(フリーの奴)で、巨大なテキストファイル(数十MB)を調べているのですが、
遅くて困ってます。

with-open-file で開いて普通に read-line で読んでシェルのwlとかgrepみたいな
事をしているのですが、 perl の方が早いんです…コンパイルしてるのに…orz
何か良い方法ないですか?
102デフォルトの名無しさん:2007/06/18(月) 23:11:48
その遅いところだけ perl 使えばいいと思うが...。
103デフォルトの名無しさん:2007/06/18(月) 23:12:29
sbclに乗り換えるとかw
製品(の評価版)だとLispWorksが速かったような記憶がある(5年くらい前の話)
104101:2007/06/18(月) 23:18:30
>>102
perlより遅いって下手丸出しで何か悔しいんですが、、
perlはどんな技でテキスト処理を早くしてるんですかねぇ?
>>103
うーん。できればaclで済ませたいです。
105デフォルトの名無しさん:2007/06/18(月) 23:18:51
>>102
その思考に至るまでに、大抵の奴は宗教的言語熱に嵌るんだなあ。
塩だけで料理は出来ないのに、何でも塩焼きが一番みたいに考えるw
106デフォルトの名無しさん:2007/06/18(月) 23:35:57
俺は鯖の塩焼きより味噌煮の方が好きだな。
107デフォルトの名無しさん:2007/06/18(月) 23:42:57
Perl の正規表現エンジンは C でカリカリにチューニングされてると聞くけど、
Perl vs CL の対決なのではなくて、C vs CL の対決になってるんじゃないの。
108デフォルトの名無しさん:2007/06/19(火) 00:49:49
無駄なIOとか、本質的でない部分で時間くってんじゃね?
109デフォルトの名無しさん:2007/06/19(火) 00:50:52
とりあえず、どこがボトルネックが探るのが先決だねえ
110デフォルトの名無しさん:2007/06/19(火) 06:11:08
正規表現エンジンと言えば、CL-PPCRE はどう?
111101:2007/06/19(火) 07:23:13
誤解を招きましたが正規表現の問題じゃなかったです。すみません。

調べかたがよく分かんないですが、perlの場合ディスクキャッシュが使えてて、
CLだと使えてないような気もしてきました。
プロファイルとっても大量に呼ばれる read-line そのものが時間食ってる感じです。
112デフォルトの名無しさん:2007/06/19(火) 07:36:42
>>111
久しぶりに来たらなんか変な方向に進んでるな…。ディスクキャッシュは関係ないよ。

メモリ消費を比べればわかるが read-line は必ず「新しい文字列」を返すんだよ。
で、大量のテキストを読み込むと GC のコストがばかにならない。
read-sequence で一気に読んだり、同じバッファを使い回したりもできるが、
実は最新の ACL だとズバリその用途の read-line-into なんてのがある。
http://www.franz.com/support/tech_corner/read-line-variants-071406.lhtml
113デフォルトの名無しさん:2007/06/19(火) 10:00:14
            _,,..r'''""~~`''ー-.、
            ,,.r,:-‐'''"""~~`ヽ、:;:;:\
           r"r          ゝ、:;:ヽ
   r‐-、   ,...,, |;;;;|       ,,.-‐-:、 ヾ;:;ゝ
   :i!  i!  |: : i! ヾ| r'"~~` :;: ::;",,-‐‐-  `r'^!
    !  i!.  |  ;| l|  ''"~~   、      i' |   グレアム見てる? イェーイ!
     i! ヽ |  | |    ,.:'"   、ヽ、   !,ノ
    ゝ  `-!  :| i!  .:;: '~~ー~~'" ゙ヾ : : ::|
   r'"~`ヾ、   i! i!   ,,-ェェI二エフフ : : :::ノ~|`T
  ,.ゝ、  r'""`ヽ、i! `:、   ー - '" :: : :/ ,/
  !、  `ヽ、ー、   ヽ‐''"`ヾ、.....,,,,_,,,,.-‐'",..-'"
   | \ i:" )     |   ~`'''ー---―''"~
   ヽ `'"     ノ
114101:2007/06/19(火) 22:18:11
>>112
read-sequence!ビンゴです。おかげで perl と同じくらいになりました。
実はread-sequenceには気づいていたのですがシーケンスは関係ないと
思い込んでいました。文字列もシーケンスでした‥‥
探したら役に立つ記事見つけました
ttp://www.emmett.ca/~sabetts/slurp.html
どうもありがとうございました。
115デフォルトの名無しさん:2007/06/20(水) 00:32:46
>>114
君はいい子だからこれからも来るように
116デフォルトの名無しさん:2007/06/20(水) 01:12:52
******恋のおまもり******

  これを見た人は,超超超超幸せもの☆☆

  @週間以内に好きな人に告白されるか、
■■■■■■■■■■■■■■■■■■
■■■■□□□■■■■□□□■■■■
■■■□□□□□■■□□□□□■■■
■■■□□□□□□□□□□□□■■■
■■■□□□□□□□□□□□□■■■
■■■□□□□□□□□□□□□■■■
■■■■□□□□□□□□□□■■■■
■■■■□□□□□□□□□□■■■■
■■■■■□□□□□□□□■■■■■
■■■■■■□□□□□□■■■■■■
■■■■■■■□□□□■■■■■■■
■■■■■■■■□□■■■■■■■■
■■■■■■■■■■■■■■■■■■

  好きな人とイイ事があるよ・・・・☆★

  コレを読んだら、1時間以内にどこかに貼る★★

数ゎあなたが好きな人への思いを込めて
117デフォルトの名無しさん:2007/06/20(水) 03:03:56
>>116
好きな人がいない場合はどうすれば良いんでしょうか?
っーか、行動半径に妙齢の女性がいないんですけれども。

話は変わって質問です。
(defun reverse$ (lst)
(if (null lst) nil
(append (reverse$ (rest lst))
(list (first lst)))))

でリストの長さnがある程度長いとするとreverse$の計算時間がnの2乗に
比例すると本に書いてあって、
時間をT(n)として、
(rest lst)の長さは
n-1なので(reverse$ (rest lst))の計算時間はT(n-1),
(list (first lst))の時間は1,appendの時間はn-1となる。
T(0)=1とみなすと、
T(n)=T(0)+1+2+......+n=(n^2+n+2)/2,n=0,1,.....
と説明してあるのですが、いまいちピンと来ません。
どうしてこのreverse$の計算時間がリストの長さの2乗になるのでしょうか?
118デフォルトの名無しさん:2007/06/20(水) 03:24:42
わかりやすい説明だと思うが、どこがピンと来ないのかね?
119デフォルトの名無しさん:2007/06/20(水) 08:25:12
すいません、自分が数列の和の公式を理解してませんでした。
中学校に入ってやり直してきます。
120デフォルトの名無しさん:2007/06/20(水) 12:33:00
中学からやり直しても得られるものは何もないぞ
121デフォルトの名無しさん:2007/06/20(水) 21:20:05
>>120
自分の周りの過半数は女子だ。
それだけでもやり直す価値はあるぞ。
122デフォルトの名無しさん:2007/06/21(木) 23:45:04
変な流れぶったぎってちょっとしたまとめ。

(let ((buf (make-string (file-length in))))
(read-sequence buf in)
...
デカい文字列をメモリ上に作って処理すれば、
acl の正規表現は perlに全然負けてないです。shiroさん疑って
ごめんなさい。regexp2(・∀・)イイ!!
きっとperlも一行ずつ処理しているように見せて、
裏でいろいろやってるんですね。perlなめてました。

でも、コマンドラインのwc -lより速い行数計算CLプログラムは、
作れませんでした。単純な処理だとやっぱりCには勝てないのでしょうか…。
123デフォルトの名無しさん:2007/06/22(金) 00:45:22
勝つ必要があるの?どうせ不毛な議論になるからやめよう。

用途によって言語は使い分ける、以上。
124デフォルトの名無しさん:2007/06/22(金) 11:21:48
Perl は昔から文字列の処理に強かったからなぁ。
CGI の言語として普及したのも文字列処理の強さのお陰。
HTML を処理するには簡単に文字列処理が出来なきゃならんし。

それにスクリプト言語の中でも Perl は割と処理速度に力入れてる方だし。
125デフォルトの名無しさん:2007/06/22(金) 11:42:38
Perl より高速なスクリプト言語ってあるの?
126デフォルトの名無しさん:2007/06/22(金) 12:12:03
あるよ
127デフォルトの名無しさん:2007/06/22(金) 14:05:42
それはC#とゆうものです.............
128デフォルトの名無しさん:2007/06/26(火) 06:36:43
reverseと同じ作用をする関数をreverseを使わずに作りたいのですが

(defun my-reverse (l)
(cond ((atom l) l)
(t (cons '()(list (my-reverse (cdr l)) (car l))))))

とやると

> (my-reverse '(a b (c d)))
(NIL (NIL (NIL NIL (C D)) B) A)

となってしまいます。
どうすればよいのでしょうか?
ちなみにLISPは本当に素人です…
129デフォルトの名無しさん:2007/06/26(火) 08:55:00
130デフォルトの名無しさん:2007/06/26(火) 11:14:17
>>129
盲点でした…
ありがとうございます
131デフォルトの名無しさん:2007/06/28(木) 23:38:30
occurと言う関数がtreeの中にitemが含まれる時Tを返すとすると、
(defun occur (item tree)
(if (atom tree)(eql item tree)
(if (occur item (first tree))t
(occur item (rest tree)))))
となるわけなんですが、
(eql item tree)が最終的にtを返すのであって
(occur item (first tree))でtが評価される事は無いですよねぇ。
ifが有るから便宜上tと有るだけですよねぇ?
132デフォルトの名無しさん:2007/06/29(金) 00:11:34
まず落ちつけ。聞きたいことがよくわからん。
(eql item tree) が T を返すと (if (occur item (first tree)) T ...) の T が返るから
最終的に if の T が返ることもあるだろう。
133デフォルトの名無しさん:2007/06/29(金) 00:36:27
ああ、分かった!
treeが分解されていって、
最終的に(eql item tree)でTが出て評価が終わり思ってたけれど、
再帰って数字だけじゃなくて、
深く降りて行ってTが返ってきてもTを返すんだ。
(語彙が少ないから適切に説明できない)
134デフォルトの名無しさん:2007/06/29(金) 00:40:59
2番目のifを
(or (occur item (first tree)) (occur item (rest tree)))
にするとわかりやすいかな
135デフォルトの名無しさん:2007/06/29(金) 01:03:20
例えば
>(setq a'(99 88 77 66 55))
となっていて
>(printlist a)
とすると
>( (1 99) (2 88) (3 77) (4 66) (5 55) )
と返すようにしたいんですが、うまくいきません。
どうすればいいでしょうか?
やっぱり再帰を使うんですよね?
136135:2007/06/29(金) 01:14:13
すいません、自分では
(defun printlist(s n)
(cond ((equal n 1) s)
(t (cons n (printlist (car s)(- n 1))))))

と作ってみたんですが、
> (printlist a 5)
とやってみると、エラーで99はリストではないと怒られてしまいます。
137デフォルトの名無しさん:2007/06/29(金) 01:19:53
こんなもんかな
(defun printlist (s &optional (n 1))
 (if s (cons (list n (car s)) (printlist (cdr s) (1+ n)))))
138135:2007/06/29(金) 02:13:03
>>137
おお!
ありがとうございます!!
139デフォルトの名無しさん:2007/06/29(金) 03:33:07
やっぱり再帰って Scheme のほうが向いてるんじゃないか。
反復を表現するためのドメイン特化言語 (DSL) LOOP を恐れずに使う。

CL-USER> (loop for e in '(99 88 77 66 55)
for i from 0
collect (list i e))
((1 99) (2 88) (3 77) (4 66) (5 55))
140デフォルトの名無しさん:2007/06/29(金) 06:07:05
両方使えるのがCLの良い所。
141デフォルトの名無しさん:2007/06/29(金) 15:29:42
doよりもloopの方を使うことが多い?
142デフォルトの名無しさん:2007/06/29(金) 16:26:34
(defun color (fruit)
(case fruit
(apple 'red)
((banana lemon) 'yellow)
(peach 'pink)
(t "I don't know")))
と言う果物の名前を引数にとってその色を返す関数で、
(t "I don't know")の所でtが有るのはLispではNIL以外は何でも真だからですか?
143デフォルトの名無しさん:2007/06/29(金) 18:43:22
>>141
個人的には loop は単純な無限ループ以外では使わない。知識がCLtL1で止まってるもんで。w
144142:2007/06/30(土) 02:55:29
すいません。
本当は
(defun color (fruit)
(case fruit
(apple 'red)
((banana lemon) 'yellow)
(peach 'pink)
(otherwise "I don't know")))
なんでしょうけれども、
最後の一行を
(t "I don't know")))にしてもOKだと説明してあって、
どうしてなのかな?と自分なりに考えた結論だったのですが、間違ってました?
145デフォルトの名無しさん:2007/06/30(土) 05:14:03
http://www.lisp.org/HyperSpec/Body/mac_casecm_ccasecm_ecase.html
ここを見る限りtとotherwiseを特別扱いしてるだけな気がする。
146デフォルトの名無しさん:2007/06/30(土) 12:14:54
>>141
do と loop は微妙に住み分けている。基本は do なんちゃら〜だけど、
以下の場合は loop を使う。とうか do より楽ができるパターンに使う。
A. collect を使いたいとき : DO だと push していって reverse だけど、このパターン用の DSL がこれ
B. ((x 1) (x 2)) みたいなパターンを for (id num) in ((x 1) (x 2) みたいな
C.
147デフォルトの名無しさん:2007/06/30(土) 12:16:44
あ、途中でおくっちゃった。 C. 以降は気分つーことで。
148142:2007/06/30(土) 12:49:08
>>145
特に意味はないのかなぁ。
本スレでも聞いてみますね。
149デフォルトの名無しさん:2007/06/30(土) 23:53:48
ファイル関係で解らないことがあります。
Lispworksではfile-directory-pをつかって渡したPATHがディレクトリかファイルか区別がつくようなのですが
sbclやclispではファイルとディレクトリの区別を付ける方法がわかりません。
HyperSpecを渡り歩いたのですがこのあたりの記述をさがせませんでした。

ファイルシステム関係は言語実装と別な領域の話で仕様は無いよと言うことになってしまうのでしょうか?
150デフォルトの名無しさん:2007/07/01(日) 01:38:22
まぁ、 Lisp は「ディレクトリ」って概念がないフィアルシステム上でも動いてきたからね…。
ファイルやディレクトリを扱うには Edi Weitz 氏の CL-FAD (File And Directory) が今は標準的。
元は Peter Seibel が Practical Common Lisp 書くときに用意したやつで、Edi 氏がパッケージにして公開してくれる。
で、件の処理はパッケージ内で以下のように定義されてる。pathname-name と pathname-type が無いものがディレクトリであると。
これで不自由はしてないよ。

(defun component-present-p (value)
"Helper function for DIRECTORY-PATHNAME-P which checks whether VALUE
is neither NIL nor the keyword :UNSPECIFIC."
(and value (not (eql value :unspecific))))

(defun directory-pathname-p (pathspec)
"Returns NIL if PATHSPEC \(a pathname designator) does not designate
a directory, PATHSPEC otherwise. It is irrelevant whether file or
directory designated by PATHSPEC does actually exist."
(and
(not (component-present-p (pathname-name pathspec)))
(not (component-present-p (pathname-type pathspec)))
pathspec))

ロード方法: SBCL なら cl-fad.tar.gz をダウンロードして展開後、
CL-USER> (load "cl-fad.asd")
CL-USER> (asdf:oos 'asdf:load-op :cl-fad)
CLISP なら ASDF も別途インストールしてくれ。
151デフォルトの名無しさん:2007/07/01(日) 01:40:31
フィアルシステムって何だよ。ファイルシステムです。ごめん。
152デフォルトの名無しさん:2007/07/01(日) 06:14:20
>>150
おはようございます、教わった関数とdirectory関数をつかってパスがディレクトリかどうか判定できるようになりました。
ありがとう。

153デフォルトの名無しさん:2007/07/01(日) 07:34:09
>>150
>>Lisp は「ディレクトリ」って概念がないファイルシステム

って、どんな感じなんでしょう?

全部、ひとつのディレクトリの中に収まっているようなイメージなんでしょうか?
ぜひ、教えてください。
154デフォルトの名無しさん:2007/07/01(日) 15:50:59
>>153
そう。一階層しかない。
Common Lispが制定された頃(20年以上前)はそういうOS(たとえばCP/M)が生き残っていたのじゃよ。
155デフォルトの名無しさん:2007/07/01(日) 15:55:51
だれか政治力のある人に CLtL3 を提案してほしい。GLSはもう興味無いのかな。
156デフォルトの名無しさん:2007/07/01(日) 18:05:02
>>155
何か案があるなら提案すりゃいいんじゃね。各ベンダとも独自の拡張を施してるわけだし。
で、なんで共通部分である ANSI CL の部分を変更したいんだ?
処理系の対応なんかでかなりのコストがかかるけど。
157デフォルトの名無しさん:2007/07/01(日) 18:15:37
>>156
そりゃ独自に似たような拡張やってるなら共通部分に入れたほうが良いでしょ。
コスト掛かるって意味がわからんけど、標準になればみんな対応するでしょ。
158デフォルトの名無しさん:2007/07/01(日) 18:48:41
よくわからん。何を標準化してほしいんだ?ただ改訂したい改訂したいといわれても…
159デフォルトの名無しさん:2007/07/01(日) 18:50:48
憲法論議みたいだな
160デフォルトの名無しさん:2007/07/01(日) 18:53:58
>>158
例えばちょっと上で出たディレクトリの話とか、多少時代遅れになってる部分はあると思う。
Unicodeの扱いなんかもベンダ独自でやってるけど、共通化すると便利ではないか?
161デフォルトの名無しさん:2007/07/01(日) 19:05:35
あーそりゃ便利だと思うけどね。その程度では規格制定のコストを払ってくれるところはないと思うよ…
Unicode 周りというか国際化対応にかんしてもまだ課題は多くて The Right Thing は見えないしね。
CLRFI http://clrfi.alu.org/ でどかんとブチ挙げるとか、ライブラリ書いて cliki あたりで公開してデファクト
目指すか、 CL-FAD みたいな事実上標準的なライブラリで我慢するか。

> コスト掛かるって意味がわからんけど、標準になればみんな対応するでしょ。
結構軽く考えてるな。まず R6RS の推移と主要処理系が対応するまでの過程を見てみると参考になると思う。
162デフォルトの名無しさん:2007/07/01(日) 19:12:44
>>161
まあ軽く考えてると言われればそうかもしれん。せめて R6RS みたいな話が Common Lisp にも
出てこないかな、という無責任な希望程度の話。議論するつもりは無いので、このくらいで。
163デフォルトの名無しさん:2007/07/01(日) 21:04:30
http://karetta.jp/article/blog/ll-spirit/033840
これをCLで素朴にやってみたんですけど誰か添削してくれませんか。

(defvar *capacity* nil) ; int list
(defvar *goal-p* nil) ; int list -> bool

(defun room-of (n state) (- (nth n *capacity*) (nth n state)))
(defun lset (l n v) (cond ((= n 0) (cons (+ (first l) v) (rest l)))
                           (t (cons (first l) (lset (rest l) (- n 1) v)))))

; int list -> (int . int) -> int list
(defun move (state pair)
  (let* ((from (first pair))
        (to (rest pair))
        (m (min (room-of to state) (nth from state))))
    (lset (lset state from (- m)) to m)))

; int list -> (int . int) list
(defun all-moves (l)
  (remove-if #'(lambda (pair) (= (first pair) (rest pair)))
      (mapcan #'(lambda (x)
                (mapcar #'(lambda (y) (cons x y))
                        l))
              l)))
;続く
164デフォルトの名無しさん:2007/07/01(日) 21:05:18
;続き
; int list -> int list list
(defun successors (state)
  (mapcar #'(lambda (x) (move state x)) (all-moves '(0 1 2))))

(defun solve-abura (a b c)
  (let* ((*capacity* (list a b c))
         (target-amount (/ a 2))
         (*goal-p* #'(lambda (state) (= (count target-amount state) 2)))
         (start (list a 0 0)))
    (abura (list start))))

(defun abura (goal-stack)
  (let ((state (first goal-stack)))
    (cond
      ((funcall *goal-p* state) (reverse goal-stack))
      ((member state (rest goal-stack) :test #'equal) nil)
      ((some #'(lambda (amt cap) (> amt cap)) state *capacity*) nil)
      (t (reduce
           #'(lambda (result new-goal-stack) (or result (abura new-goal-stack)))
           (mapcar #'(lambda (s) (cons s goal-stack)) (successors state))
           :initial-value nil)))))

;(trace abura)
(print (solve-abura 10 7 3))
165153:2007/07/01(日) 22:32:38
>>154
レス、どうもです。

ファイル操作に関連する苛立たしさ、
(cltl2の本、アンナに分厚いのに)
change directoryが無いとかは、
そういうことに起因してたんですか。

私が使っているlispのアプリの作者さんが、cd等の関数を、
処理系毎にaliasっぽく簡単な書き換えをしているのを見て、
なんでこんな基本的な関数も用意してくれないのかと思っていたのです。

「directoryの概念の無いファイルシステム」
とか言われちゃうと、仕方がないとも思えるけど、
ansi cl化する時、足してほしかったな。
166デフォルトの名無しさん:2007/07/01(日) 23:16:49
当時、UNIX ベースのシステムが主流になるとは保証できなかったからしょうがない。
大抵の言語ではファイルシステム関連の機能は規格というよりライブラリの領分だしね。

個人的には pathname は夢の残骸みたいな感があるね。構成要素は↓だけど、
pathname-device, pathname-directory, pathname-host, pathname-name, pathname-type, pathname-version
UNIX だと directory, name のみだよね(拡張子を type とみるかもしれない)。 Windows だと device, directory, name, type か。
当時の Lisp Machine はネットワークを備えていたから host なんてのがあるし、version なんてのも面白いよね。
バージョニングを備えていたファイルシステムが当時あったのかな?
167デフォルトの名無しさん:2007/07/01(日) 23:29:14
> バージョニングを備えていたファイルシステムが当時あったのかな?

VMS とかかな。
168デフォルトの名無しさん:2007/07/02(月) 00:12:02
TOPSにもあった気がする
169デフォルトの名無しさん:2007/07/02(月) 21:53:37
CommonLispでの外部ライブラリの使い方等について質問です。
htmlgenというライブラリをaptでインストールしましたが、このあと
どうやってそれを使えばいいのかが分かりません。

require? load?

ここらへんの知識が全くないのですが、
どこかに情報まとまっていたりしますか?

とりあえずaptでいっしょにインストールされたtest.clを読み込めるところまで
いきたいのですが・・・
170デフォルトの名無しさん:2007/07/02(月) 23:07:16
apt とか Debian いわれてもわからん。SBCL か?
(asdf:oos 'asdf:load-op :htmp-gen)
でコンパイル + ロード完了だ。だめなら、これの前に
(load "/path/to/somewhere/htmlgen.asd")
を実行しとくこと。
171デフォルトの名無しさん:2007/07/02(月) 23:15:39
    ┌─10
 ┌─┼─20
 │  └─30
 │  ┌─40
─┼─┼─50
 │  └─60
 │  ┌─70
 └─┼─80
    └─90

を表す引数なしの関数tree定義して、

次に,car や cdr 等以外の何らかのコマンドや関数等を使って,tree から次のような要素を取り出すにはどうすればいいんですか?

> XXXXXX
10
> XXXXXX
20
172デフォルトの名無しさん:2007/07/03(火) 00:41:36
>>169
ubuntuかdebianだと思うが /usr/share/doc/cl-htmlgenとかにドキュメントが入る
んで (asdf:oos 'asdf:load-op :htmlgen)か(require :htmlgen)で使えるよ。
share/docにあんまり記述が無い奴(たまにある)だったら:htmlgenの部分は/usr/share/common-lisp/systemの中に入れたとおぼしきパッケージのasdファイルがあるから
他のパッケージでワケワカメになったら探すと良いよ。


全然関係ないけど、windowsとlinuxどっちもslime+emacs+sbclでかなり幸せになれました。
で、windowsでアプリ書くのにlispbuilder使ってますが結構しんどいです。(windowのレイアウトだけはポトペタにしたいです)
windowレイヤーだけ別にポトペタして、sbclで作ったロジックと結びつけたりするような手段って無いでしょうか?
あるいは製品版のlispworksとかだとできるのでしょうか?(aclは再配布コストを負担できないので除外してます)

173デフォルトの名無しさん:2007/07/03(火) 00:51:19
LispWorks の InterfaceBuilder か?一応ポトペタもどきだが、 CAPI ライブラリは宣言的なので手で書いたほうが楽だったりする。
GUI の速度がいらねーなら LTK でいいんじゃね。GTK 系でも Socket で通信する GUI があった気がする。
どんなアプリ作るの?
174デフォルトの名無しさん:2007/07/03(火) 00:57:12
>>171
宿題なら宿題とかけよ…。なんで宿題ですって正直に言えない奴が多いんだ。
宿題じゃない風を装いたいならもうちょっと日本語をなんとかしろよ…
まぁ、どうせ答え丸写しで小言なんか聞きやしないんだろうけどよぉ

(defun tree () '((10 20 30) (40 50 60) (70 80 90)))

> (caar (tree)) もしくは (first (first (tree))) もしくは (nth 0 (nth 0 (tree)))
10
> (cadar (tree)) もしくは (first (rest (first (tree)))) もしくは (nth 1 (nth 0 (tree)))
20
175デフォルトの名無しさん:2007/07/03(火) 00:59:46
>>174
おまえ、親切だなw
176デフォルトの名無しさん:2007/07/03(火) 01:31:07
>>173
任意のファイル開いて諸元の一部を表示して、入力欄の数値を使って解析して
結果を別の名前のファイルでしまうっていうタイプのよくある奴です。
入力欄に日本語のコメントつっこんだらLTKが毎回落ちるので orz

ATOK使ってるせいかもしれないけど。 
177デフォルトの名無しさん:2007/07/03(火) 01:46:55
>>176
lispuser.net のスクリーンショットでは LTK の日本語入力できていたようだけどなー。
文字コードの設定まちがってるとかない?日本語入れたいなら LispWorks も厳しいかもねぇ。
IME のインライン入力なんか対応してる気配ゼロです。



178デフォルトの名無しさん:2007/07/03(火) 08:28:50
>>177
おはようございます。
ご指摘の通りエンコードでした、cp1250だからラテンになってました。
lispuser.netとかの記事とltk.lisp本体を参考にして次のようなフック組んだらなんとかなりました。
(defun wish-enable-japanese ()
  (let* (( s (ltk:wish-stream ltk:*wish*))
   ( i (two-way-stream-input-stream s))
   ( o (two-way-stream-output-stream s))
   ( n (make-two-way-stream
    (sb-sys:make-fd-stream
    (sb-sys:fd-stream-fd i)
    :input t :external-format *CURRENTENCODE*)
    (sb-sys:make-fd-stream
    (sb-sys:fd-stream-fd o)
    :output t :external-format *CURRENTENCODE*))))
    (setf (ltk:wish-stream ltk:*wish*) n)))

(pushnew 'wish-enable-japanese ltk:*init-wish-hook*)

set-external-formatとか(setf (external-format is))とかで処理できるかと思ったのですがデキマセンでした。
ここで小一時間ほど時間を食ってしまいました(仕事に遅れるかと思ったです@通勤電車)
#slimeからだとutf-8でlispファイルダブルクリックだとsjisなのもなんとかしたいなぁ。


Lispworksですがpersonal版はちゃんとime制御されていましたのでそんなに心配はしてないのですが、いかんせん今の円ドルレートだと送料込みで16万超えるのでショボーンって感じです。
allegroは絶対安全なんですが、事業所内分のランタイムライセンス出せません(w


179デフォルトの名無しさん:2007/07/03(火) 08:43:45
うう、lispファイルダブルクリックだとエンコードが何になるのかわからないです > _ <
ltkの戻りはutf-8で食えばsbcl側で認識するんですが orz

コンパイル時のエンコードがどこかにあるのかな?

180デフォルトの名無しさん:2007/07/03(火) 21:05:02
(setf sb-impl::*default-external-format* :cp932)
ググリまくって該当する解見つけました、
181デフォルトの名無しさん:2007/07/04(水) 17:02:03
numberp とかの p は predicate の p ですか property の p ですか?
たぶんどっちもありかも知れませんが、
property の p だという記述を見つけて気になったもので。
182デフォルトの名無しさん:2007/07/04(水) 17:05:39
predicateに決まってるじゃん。number propertyじゃ意味わからん。
183デフォルトの名無しさん:2007/07/04(水) 17:12:21
184デフォルトの名無しさん:2007/07/04(水) 17:20:29
>>183
単なる間違いだと思うが
185デフォルトの名無しさん:2007/07/04(水) 17:32:59
>>183
たんなるミスでしたか。predicate だと思ってたので、あれ?って感じで。
(数値の性質 obj) でも通じるかなぁと。
186デフォルトの名無しさん:2007/07/04(水) 22:52:18
どんだけ肩書き補正かかってんだよ。 predicate ったら predicate 〜
匿名の言う事よりも肩書を信じたいなら、GLS も predicate の略だといっている、と覚えよう。
187デフォルトの名無しさん:2007/07/04(水) 23:54:50
俺の本にも述語(predicate)って書いてあるよ。
188デフォルトの名無しさん:2007/07/07(土) 12:19:17
>>163-164
ちょっと効率よくしてみた

(defun solve-abura (a b c)
  (let* ((*capacity* (list a b c))
         (target-amount (/ a 2))
         (*goal-p* #'(lambda (state) (= (count target-amount state) 2)))
         (start (list a 0 0)))
    (catch 'solved (abura (list start)))))

(defun abura (goal-stack)
  (let ((state (first goal-stack)))
    (cond
     ((funcall *goal-p* state) (throw 'solved (reverse goal-stack)))
     ((member state (rest goal-stack) :test #'equal) nil)
     ((some #'(lambda (amt cap) (> amt cap)) state *capacity*) nil)
     (t (dolist (s (successors state))
          (abura (cons s goal-stack)))))))

違うのは catch, throw を使うようにしたところ。
これで abura の再帰呼び出し部分の reduce, mapcar がなくなった。

あとは lset も copy-seq と破壊的操作にすると少しだけ空間効率がよくなるみたい。
189デフォルトの名無しさん:2007/07/07(土) 16:15:51
質問です。
対話によるCommon Lisp入門 栗原正仁 著
p103で
(defun to (b) (< (random 1.0) b))
という関数toが出てくるのですが、
これが副作用を持つと書いてあります。
どこに副作用が有るのでしょうか?
190デフォルトの名無しさん:2007/07/07(土) 16:17:29
>>189
random
191デフォルトの名無しさん:2007/07/07(土) 22:39:11
え、randomって副作用なんですか?
副作用ってsetfで変数に値を代入したり、
defunで関数が使えるようになる事じゃないんですか?
192デフォルトの名無しさん:2007/07/07(土) 22:46:39
randomは疑似乱数列を返す。つまり、どういう順序でどういう数値が返るのか
あらかじめ決定している。従って、randomを呼ぶか呼ばないかによって、次の
randomで返る値は変化する。これを副作用と呼ばずして何を副作用と呼ぶ?
193デフォルトの名無しさん:2007/07/07(土) 22:56:50
ははぁ、成る程!
分かりました!
194デフォルトの名無しさん:2007/07/07(土) 22:57:19
引数が同じなら何度呼んでも結果が変わらないのが副作用のない関数だよ。
したがって random には副作用がある。
195デフォルトの名無しさん:2007/07/07(土) 23:02:23
こんなに詳しく解説していただいて感動です。
精進します。
196169:2007/07/07(土) 23:29:11
>>170, 172
返答どうもです。とりあえず、(asdf:oos 'asdf:load-op :htmlgen)もしくは(require :htmlgen)
で、何やらいろいろ読み込んでいるメッセージがでます。そのあと、サンプルファイルtest.clをloadしたいのだけど、
失敗します。test.clはファイルの先頭行で

(defpackage :user (:use :htmlgen))をしているのだけど、(load "test.cl")したときに、

----ここから
debugger invoked on a SB-KERNEL:SIMPLE-PACKAGE-ERROR:
The name "HTMLGEN" does not designate any package.

Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
0: [ABORT] Exit debugger, returning to top level.

(SB-INT:%FIND-PACKAGE-OR-LOSE "HTMLGEN")
----ここまで

というエラーがでます。"HTMLGEN"というパッケージは存在しないという
内容のように見えますが、これはつまり最初の読み込みがうまく行ってないということでしょうか?
197169:2007/07/07(土) 23:30:13
>>196の続き

htmlgen.asdファイルは以下のようになってます。

----ここから
kengo@Somali:/usr/share/common-lisp/source/htmlgen$ view htmlgen.asd

;;; -*- mode: lisp -*-
(defpackage #:htmlgen-system
(:use #:cl #:asdf))
(in-package #:htmlgen-system)

(defclass acl-file (cl-source-file) ())
(defmethod source-file-type ((c acl-file) (s module)) "cl")

(defsystem htmlgen
:author "John K. Foderaro"
:licence "LLGPL"
:default-component-class acl-file
:components ((:file "htmlgen"))
:depends-on (acl-compat)
:perform (load-op :after (op htmlgen)
(pushnew :htmlgen cl:*features*)))
----ここまで

まずasdfについて勉強しないと駄目なのかな・・・さっぱりわからん。。
198デフォルトの名無しさん:2007/07/07(土) 23:38:24
>>194
> 引数が同じなら何度呼んでも結果が変わらないのが副作用のない関数だよ。

ちょっと語弊があるんじゃないか?

結果って書くと普通は戻り値と解釈されることが多いが、戻り値が一定でも
副作用のある関数を書くことはできる。

逆に現在時刻を返す関数等は副作用があるとは言わないと思うし。
199デフォルトの名無しさん:2007/07/07(土) 23:47:54
横レスだけど、

>逆に現在時刻を返す関数等は副作用があるとは言わないと思うし。

全く同じ引数を渡したのに毎回異なる結果(現在時刻)を返すのであれば、
参照透明が崩されるので副作用があると思います。
現在時刻に合わせて変動する環境へのポインタみたいなのを引数に渡す
様になっていればその限りでは無いと思いますが。
200デフォルトの名無しさん:2007/07/08(日) 00:36:21
>>196
ubuntuのだとhtmlgenのパッケージ宣言がnet.html.generatorになっていてtest.clと異なるからダメポみたいだね。
取り合えずこうやって呼び出しパッケージ変更すると先にはいけます
(require :htmlgen)
(defun simple-table-a ()
(with-open-file (p "test.html"
:direction :output
:if-exists :supersede)
(net.html.generator:html-stream p ;;net.html.generator:パッケージを指定
(:html
(:head (:title "Test Table"))
(:body (:table
(:tr (:td "0") (:td "0"))
(:tr (:td "1") (:td "1"))
(:tr (:td "2") (:td "4"))
(:tr (:td "3") (:td "9"))
(:tr (:td "4") (:td "16"))
(:tr (:td "5") (:td "25"))))))))


でもこれよりhtml-templateの方が使いやすい気がするんだけどそれじゃいやなのかな?

#実はcgiでlisp使おうとしてるんで学習がてらです。
#ちっともlisp自体には詳しくないです。
201200:2007/07/08(日) 00:37:43
うぐ、コードはtest.clの物です、インデントは脳内で補間してください
202デフォルトの名無しさん:2007/07/08(日) 00:42:57
副作用という単語の定義の問題だと思う。個人的には時間取得関数を「副作用がある」と言う
のには抵抗を感じる。便宜的に「副作用がある」と宣言して、ある種の最適化を抑止しなければ
ならないケース(言語)は多いと思うけど。

上記の乱数の例についても、もし予測不能な「真の乱数」(物理乱数)を返す関数だったらどう
だろう、とか考えてしまった。(混乱させてしまったらごめんなさい)
203デフォルトの名無しさん:2007/07/08(日) 01:07:57
>>202
(setf a (f x))

こう書いたときにaが常に一意に決まる関数は副作用が無い。

aの結果が変わることを無視すれば副作用は無いように
見えるかもしれないけど
副作用の無い関数を組み合せた結果
副作用のある関数が作りうるのは副作用が無いといえないのではないか?

と、この観点では真の乱数は副作用があって、
疑似乱数で必ず種を受けとらないと動作しないものは副作用の無い関数として
扱ってよいと考える。

オプショナルで省略されたデフォルトグローバルな種を書き換えるかどうかは
この場合あまり重要ではない。

参照透明性とか言っている人はこういう風に考えているんじゃないかなと思った。

違ったらスマヌ
204デフォルトの名無しさん:2007/07/08(日) 01:10:26
>>196

> (defpackage :user (:use :htmlgen))をしているのだけど、(load "test.cl")したときに、
(defpackage :user (:use :cl :net.html.generator))
とすればいいよ。asd の定義は Makefile のプロジェクト名とターゲット指定相当なんで
実際の CL におけるパッケージ名とは別。パッケージ名は net.html.generator 。
というかそのパッケージにはドキュメントついてこないのか。ヒドいなぁ…
205デフォルトの名無しさん:2007/07/08(日) 01:11:21
思考実験をする前に、脳内定義を外界と摺り合わせしておくのも悪くない事だと思う
サンプルとして、純粋関数型言語オタクの言う副作用はこんな感じ

ttp://www.sampou.org/haskell/article/whyfp.html
206デフォルトの名無しさん:2007/07/08(日) 01:54:47
wikipediaの副作用の項にある
1. 同じ条件を与えれば必ず同じ結果が得られる
2. 他のいかなる機能の結果にも影響を与えない
が良く分からん。
1は当然として(パソコンの時間が狂ってたらアレだけれど)、
2はどういう意味なんだ?
上の例だと時間取得関数は、その戻り値(時間)を使用した
関数の結果には影響を与えるから副作用を持つ?
207デフォルトの名無しさん:2007/07/08(日) 02:16:33
>>206
2. は(上記疑似乱数の例のように)その関数を呼び出すことによって、その後に呼び出す関数の
動作が変化しないという意味じゃないかな。例えば上の疑似乱数の例は呼び出すことによって乱数
の系列がずれてしまうので副作用がある。
(正直、君の言っている意味のほうが理解できない)
208デフォルトの名無しさん:2007/07/08(日) 02:20:03
その関数呼び出しによってほかの場所に影響をあたえる、ってのが副作用じゃない?
random を一回呼び出すと次の random 呼び出しに影響を与えるけど、
時刻取得関数を呼び出しても次の時刻取得関数には影響をあたえない。
戻り値は『ほかの場所』じゃないから気にしなくていいんじゃないかな。

って書いてたら >>206に先を越された。
209デフォルトの名無しさん:2007/07/08(日) 02:20:40
>>206 じゃなくて >>207
210デフォルトの名無しさん:2007/07/08(日) 02:28:09
>>206
ぶっちゃけ状態を扱う関数はみんな副作用がある関数と言える
1.が状態を取り出す
2.が状態を書き換える

副作用というと書き換えるほうをイメージしちゃって>>202みたいに思っちゃう人が多い
211デフォルトの名無しさん:2007/07/08(日) 02:31:14
>>199
全く同じ引数を渡した時に同じ結果を返す(いわゆる「純関数」である)というのは副作用とは別の概念じゃないかな。
例えばグローバル変数の値を返すという関数は「純関数」ではないが「副作用がある」とは一般には言わないと思う。
時間を返す関数もこれと同じだよね。

もちろん、副作用のある関数は(たとえ同じ引数に同じ結果を返しても)「純関数」とは呼ばないだろうけど。
212デフォルトの名無しさん:2007/07/08(日) 02:33:05
>>210
ああ「取り出すほうも副作用と呼ぶ」のか。議論がかみ合わない理由がわかった。
日本語的には激しく抵抗があるが、そういう定義は一般的なの?
213デフォルトの名無しさん:2007/07/08(日) 02:42:11
関数型言語屋はそういう定義を使うことが多いね(偏見かな)
214デフォルトの名無しさん:2007/07/08(日) 04:52:39
>>212
日本語的にとかいい出すなら、参照透明でないものを関数と呼ぶ方が抵抗あるだろ……。
215デフォルトの名無しさん:2007/07/08(日) 05:51:37
Lispってこんなこともできねーの?
216デフォルトの名無しさん:2007/07/08(日) 09:07:59
>>214
副作用って一般的にも使うし、そもそも「作用」の一般的な意味が

| (1)他に力や影響を及ぼすこと。また、そのはたらき。
| 三省堂提供「大辞林 第二版」

だから、「取り出すほうも副作用と呼ぶ」なんて言うのは違和感が
あるのはしょうがない。

対して、参照透明なんて普通の人はあまり使わんから、どんな定義
でも「はあそういう定義ね。」っで終わり。

専門用語と一般的に使われる言葉の意味が異なることは珍しくないよ。
217デフォルトの名無しさん:2007/07/08(日) 09:33:01
いや、>>214が問題にしてるのは「参照透明」じゃなくて「関数」の方だと思う。
普通は関数っていったら数学の関数を想像するだろ?
218デフォルトの名無しさん:2007/07/08(日) 10:23:20
参照透明の定義をよく知らない人にとっては、「参照透明でないものを関数と呼ぶな」
って言われたら、「ふ〜ん、そうなんだ。」って思うだけで別に違和感を感じる余地
はあまりない。

「普通は関数っていったら数学的な関数を想像するだろ」とか書いてるけど、関数と
言う言葉のイメージって結構ばらばらなのはこの板の連中なら知ってて当然だから、
このスレではそういう(=「参照透明でないものは〜」と言う) 定義なんだと理解でき
るだろうと思う。
219デフォルトの名無しさん:2007/07/08(日) 10:35:44
>>218
参照透明という言葉を知ってるかどうかは関係ない。
printfみたいなのを関数と呼ぶ時点で慣れない人(非プログラマとか)には違和感があるだろ。
「副作用」という言葉が慣れない人にとって違和感のある意味で使われているのも、
「関数」という言葉の場合と同じ構造だ、って主張だと思うが。
220デフォルトの名無しさん:2007/07/08(日) 12:53:05
副作用のあるものも含めて「関数」と呼ぶのはソフトウェア業界全体に普及している表現だが、
「副作用が無い」を「参照透明」の意味で使うのはそれほど一般的ではないと思う。
221デフォルトの名無しさん:2007/07/08(日) 15:12:09
副作用の有無と参照透明性の有無は別々の話。関係はあるけど。
俺は「副作用」が>>210の意味で使われるのって普通じゃないと思うんだけど
そういう意味で使われている文脈って例えばどういうの?
222デフォルトの名無しさん:2007/07/08(日) 15:19:05
223デフォルトの名無しさん:2007/07/08(日) 15:58:07
gccのinfo、関数のattributeの説明から

> `const'
> Many functions do not examine any values except their arguments,
> and have no effects except the return value. (中略)
>
> The attribute `const' is not implemented in GCC versions earlier
> than 2.5. An alternative way to declare that a function has no
> side effects, which works in the current version and in some (後略)

この "a function has no side effects" が意味するものは当然これ。

> Many functions do not examine any values except their arguments,
> and have no effects except the return value.
224169:2007/07/08(日) 17:07:58
>>200,>>204

おーー。できました!
どうもありがとうございます。

net.html.generatorというのは、htmlgen.clの先頭で
defpackageしている名前のことですね。

html-templateっていうのもあるんですか。
何がメジャーとかぜんぜん知らないんで一番最初に見つけたhtmlgenで
とりあえずやってみました。他にもlmlとか言う名前のhtmlテンプレートも
あったような気がする。いろいろあってわからんです
225デフォルトの名無しさん:2007/07/09(月) 00:31:09
>>222
具体的に例えばどれ?
226デフォルトの名無しさん:2007/07/09(月) 00:40:56
ごめ223見てなかった。Thanks.
227デフォルトの名無しさん:2007/07/09(月) 21:24:17
CLISPでのデバッグ方法を解説している日本のサイトはないでしょうか?
228デフォルトの名無しさん:2007/07/09(月) 23:49:25
どんなバグなのかによるんじゃないかな。バグ入り関数の例とか示せる?
229デフォルトの名無しさん:2007/07/10(火) 08:45:11
http://www.kmonos.net/wlog/61.html
これの、Curry-Howard Isomorphismの項なんだけれど、
これをCLでやるにはどうすればいいんだろう。
(a かつ (aならばb)) ならば b

haskellで
Prelude> :t ¥x -> (snd x) (fst x)
¥x -> (snd x) (fst x) :: (a, a -> t) -> t
らしいんだが、CLならどう書けばよいのかHaskellに詳しくないからさっぱり。
そもそもHaskellの::に相当する構文が無いからCLには無理?
230デフォルトの名無しさん:2007/07/10(火) 09:03:24
CL には直積型がないからね
cons で代用するとこうかな
(lambda (x) (funcall (cdr x) (car x)))
231デフォルトの名無しさん:2007/07/10(火) 09:09:01
そのまま (defun hoge (x) (funcall (cdr x) (car x))
普通にカーリー・ハワード対応で調べればいいのに。

232デフォルトの名無しさん:2007/07/10(火) 09:16:29
>>230
(lambda (x) (funcall (cdr x) (car x)))

:t ¥x -> (snd x) (fst x)
に対応しているのは分かるんだけれど、
このラムダ式が定義できる事が、証明した事になるのかな?
233デフォルトの名無しさん:2007/07/10(火) 09:28:45
>>232
> このラムダ式が定義できる事が、証明した事になるのかな?
疑問点がいまいちわかんない。
直観主義命題論理の証明と Lisp の関数とが対応するかということなら、
少なくとも上に書いたような方法では対応させられないと思う。
234デフォルトの名無しさん:2007/07/10(火) 09:34:14
いや、証明に対応する関数は書けるか。
関数を書いても対応する証明があるとは限らない。

例えばこういうのは、対応する証明が命題論理の範囲にはない。
(lambda (x) (funcall x x))
235デフォルトの名無しさん:2007/07/10(火) 09:41:03
>>233
>直観主義命題論理の証明と Lisp の関数とが対応するかということなら、
>少なくとも上に書いたような方法では対応させられないと思う。
残念、無理なのか。
いや、カーリー・ハワード対応という言葉を今回初めて知って、
(Lispで数式証明のアプリケーションが有るのは知ってるけれど)
んで、(a かつ (aならばb)) ならば bを証明してみたいなぁと思った訳です。
236デフォルトの名無しさん:2007/07/10(火) 13:47:03
>>235
(lambda (x) (funcall (cdr x) (car x)))
を満たすようなxの値が存在することが証明に対応、
つまりそんなxを一つ挙げればいい……んじゃなかったっけ? うろ憶え。
237デフォルトの名無しさん:2007/07/10(火) 16:38:25
静的な型がないと駄目だな。
\x -> x xはHaskellでは型エラー。
238デフォルトの名無しさん:2007/07/10(火) 22:14:43
(defun hoge (a b)
(if (and a (eql a b)) b
nil))
じゃ、ダメなのかな?
っーかこの分野って、やってる人少ないのかな?
あんまりレスないね。
ここの人、こんなこと好きそうなイメージなんだけれど。
239デフォルトの名無しさん:2007/07/11(水) 00:51:45
Cで書いたプログラムとCLispで書いたプログラムを
互いに通信させたいんだけど,そういった場合ってやっぱSocket?
何かいいライブラリとかありませんかね
240200:2007/07/11(水) 01:40:07
通信だとsocketですが、お互いのやり取りの中身が直接呼び出しだったり、共有メモリでなんとかできるのならCFFIあたりを使ってみてはどうですか?
OpenGLの呼び出しとかで使われてるやつです。
241デフォルトの名無しさん:2007/07/11(水) 04:06:54
>>238
本スレ行ったほうがいいかもね。
その手の話はスキーマーのほうが乗ってくる。
242デフォルトの名無しさん:2007/07/11(水) 09:27:13
>>238
λ計算は知ってるけど、Lisp とはそれほどきれいに対応しないと思う。
ちなみにそのコードは Curry-Howard とはぜんぜん関係ないような。
243デフォルトの名無しさん:2007/07/13(金) 00:19:32
(format t "~X ~X~%" a b)とやって
#(69) 69
と表示されるんですが,同じ数値でも片方に#()がついてしまいます.
これってただの数値じゃないってことですか?
その成果,後々にa = #x69とやってもTになってくれません

aは
(let ((a (make-array 1 :element-type '(unsigned-byte 8)))))
とかやって
EXT:READ-BYTE-SEQUENCEとかで読み込んだ値なんですが...
244デフォルトの名無しさん:2007/07/13(金) 00:24:36
>>243
ただの数値じゃないんですよ。配列ってわかります?
245デフォルトの名無しさん:2007/07/13(金) 00:27:13
>>244
それだ!
246デフォルトの名無しさん:2007/07/13(金) 21:41:29
Lispの練習問題を探していて

Define show-list to act like Lisp's PRINT, except that it should print
square brackets instead of parentheses. (Printing to a string and
replacing parentheses doesn't count.)

Both functions should be able to print any S-expression, including
atoms.

> (show-list '(a b c))
→ [A B C]

ってのを見つけました。

これを、"ANSI Common Lisp"の第3章までの知識で解きなさい、ってんですけ
ど、オジサンの頭ではどーにもなりません。

そのものズバリでなくても、ヒントとか考え方とか教えていただけないでしょ
うか?



247デフォルトの名無しさん:2007/07/13(金) 22:14:08
SBCLでcompile-fileしてもあんまり速くならないんですが、
何か他に速くする手段てあるでしょうか?
248デフォルトの名無しさん:2007/07/13(金) 22:39:40
>>246
1. 全てのS式を表示だからatomの場合、consの場合、nilの場合で場合わけすることになるはず。atomとnilは自明。
2. consの場合の表示を分解すると括弧の表示+最初の要素を表示(要素はさらにconsかもしれない)+残りの表示+括弧閉じになるはず。
3. この「残りの表示」を別関数で定義してみる。(←ここがポイント)
4.「残りの表示」の場合わけもさっきと同様になる。
5. ここでconsの場合の処理はやっぱり「最初の要素について(これもconsかもしれない)」「残りについて」になる。
249デフォルトの名無しさん:2007/07/13(金) 22:42:50
説明下手糞?
250デフォルトの名無しさん:2007/07/13(金) 22:48:00
ごめん、代わりに頼むよ
251デフォルトの名無しさん:2007/07/14(土) 00:35:32
>>248
おぉ、早速ありがとうございます。
参考にしていろいろいじってみます。

日本語で読むと簡単そうに見えるんだけどなぁ。

(defun show-list (lst)
 (if (null lst)
  lst
   (if (atom lst)
    :

って感じでいいんですよね?



252デフォルトの名無しさん:2007/07/14(土) 00:55:32
配列とか構造体とか () 使うのはほかにもあるけど
symbol と cons だけでいいのかな

>>251
>  (if (null lst)
>     lst
"nil" って文字列を印字しなきゃいけないんでないの?
253246:2007/07/14(土) 09:21:45
>>252

あぅ。やっちまった orz
自分で言っといて...

(defun show-list (lst)
 (format t "~A" (rec-show-list lst)))

(defun rec-show-list (lst)
 if (null lst)
  lst
  :

なんてのを考え中。


254デフォルトの名無しさん:2007/07/14(土) 10:16:14
>>247
sbclはコンパイラのみの処理系だから、ソースをロードしても実行時には
コンパイルされていると思う。だから差を感じられないということじゃないかな。
255デフォルトの名無しさん:2007/07/14(土) 13:51:28
>>253
その設計は無理があると思う
だって format って () 使うじゃん
256デフォルトの名無しさん:2007/07/14(土) 17:59:26
>>246
問題が「show-listを作れ」ってなってるのがミスリーディングかも。
任意の式を出力する関数show-exprを作れ、が普通じゃなかろうか。
ただしリストの表示にはパーレンの代わりにブラケットを用いる。
257246:2007/07/14(土) 19:44:08
なんか盛り上がってるし(^^;)。

>>255
> だって format って () 使うじゃん
ごめんなさい。これ分かりません。
format使うと必ず()がつくってこと?

>>256
"ANSI Common Lisp"の3章の練習問題なので、そこまでの知識で解かないとい
けないのかな、と思ってます。
出力用の関数はformat、データ形式もリスト(とアトム)のことだけ考えればい
いのかと。
258255:2007/07/14(土) 20:17:05
>>257
たとえば
(format t "~A" x)

[a b c]
が出力されるような x ってどんなもの?

ところでリストでもアトムでもないオブジェクトってあったっけ
259デフォルトの名無しさん:2007/07/14(土) 23:18:09
んん?問題は良い問題なのになんか根本的に間違った方向にいってないか?

S-式は、リストと思わずに木(ツリー)と思った方がいい。
で、木の要素を順番に辿る。木の要素が atom か consp かで場合分け。
consp だったら、 まず [ を出力し、hogehoge の処理をして最後に ] を出力する。
任意の入れ子になった木を出力できないと行けないんだから、
hogehoge は言わなくても分かるな?
260デフォルトの名無しさん:2007/07/15(日) 00:39:44
要するにwrite相当を実装しろってことでしょ?

(defun write-list(exp)
(princ "[")
(loop (if (not (consp exp)) (return))
(write (car exp))
(setq exp (cdr exp))
(if (consp exp) (princ " ")
(if (not (null exp))
(progn (princ " . ") (write exp)))))
(princ "]"))

(write-list '(a b c . d))
[A B C . D]
write本体は自分で考なよおじさん


ちなみに俺もCommonLisp初めてなんだけど、
whileって無いみたいね。
上の(loop (if (not (consp exp)) (return)) 〜 )
てかなりマヌケな気がするんだけど、もっと簡単にできない?
whileがあれば(while (consp exp) 〜)で済むのに
261デフォルトの名無しさん:2007/07/15(日) 00:40:40
doがあるよ
262デフォルトの名無しさん:2007/07/15(日) 00:44:46
これでしょ?
(defmacro while (condition &body body)
`(do () ((not ,condition)) ,@body))

でもdoはなんとなくキモイんだよな…
263デフォルトの名無しさん:2007/07/15(日) 01:57:06
ループの話題で思い出したけど、
最新版のSBCLで以下のコードがn=5000程度で死ぬんですが、
末尾再帰の最適化はしてくれないんでしょうか?
(defun w(n)
(labels ((x (n) (write n) (if (> n 0) (y (- n 1)) ))
(y (n) (write n) (if (> n 0) (z (- n 1)) ))
(z (n) (write n) (if (> n 0) (x (- n 1)) )))
(x n)))
(w 5000) ;程度で死ぬ

schemeでは
(define (w n)
(letrec ((x (lambda (n) (write n) (if (> n 0) (y (- n 1)))))
(y (lambda (n) (write n) (if (> n 0) (z (- n 1)))))
(z (lambda (n) (write n) (if (> n 0) (x (- n 1))))))
(x n)))
(w 10000000000) ;nをいくら大きくしてもOK
264デフォルトの名無しさん:2007/07/15(日) 02:46:34
>>258
3 章までとか言われてもよくわかんないけど、princ くらいはあるのかな?
考え方:
0. リストがわたってくる
1. [ を表示
2. 各要素を表示
2-1. 要素がもうないなら終わり
2-2. 要素を一個表示して 2. へ
3. ] を表示

(defun show-list (lst)
(princ "[") ; 1
(show-list-contents lst) ; 2
(princ "]")) ; 3

(defun show-list-contents (lst)
(cond ((null lst) ; 2-1
nil)
(t ; 2-2
(princ (car lst))
(show-list-contents (cdr lst)))))
265264:2007/07/15(日) 02:48:28
264 のリスト内のリストも [] で表示するのは課題としときます。
ヒント: 要素がリストなのかアトムなのかを判定して…

>>260
while の内部実装が do でキモいというなら↓でどうでしょう。
(loop while (consp exp) do ....)
これも嫌なら素直に Scheme を使ったほうがいいと思います。

>>263
SBCL 1.0.7 で disassemble して末尾再帰の最適化もされている事を確認しました。
(w 10000000000) も普通に動いてるようですが。
266デフォルトの名無しさん:2007/07/15(日) 03:24:34
>>263
ごめんWindows版だから1.0.6だった。
普通にインストーラで作成されるショートカットから起動して
>>263のコードをコピペ。
(w 10000)で

12840283928fatal error encountered in SBCL pid 2812:
GC invariant lost, file "gencgc.c", line 832

LDB monitor
ldb>
となって止まる。
今確認したら5000だとなんか完了したりもするので10000で。
6000辺りだとプロンプト'*'が連続表示して暴走した風になって、
タスクマネージャで見るとメモリをどんどん消費していくのが判る。
ほっとくとOS側(XP Pro. SP2)でメモリ不足のダイアログが出る。
Windows版特有なのかな・・?
267デフォルトの名無しさん:2007/07/15(日) 03:25:23
ごめん上は>>265宛て
268デフォルトの名無しさん:2007/07/15(日) 03:28:54
* (disassemble 'w)してみたけど、最適化掛かってるかわからないので
よければ鑑定お願いします。

; 0A626C8E: 8B45F0 MOV EAX, [EBP-16] ; no-arg-parsing e
ntry point
; C91: 8945F4 MOV [EBP-12], EAX
; C94: E9FB000000 JMP L14
; C99: L0: 8BDC MOV EBX, ESP
; C9B: 83EC0C SUB ESP, 12
; C9E: 8B55F4 MOV EDX, [EBP-12]
; CA1: 8B05586C620A MOV EAX, [#xA626C58] ; #<FDEFINITION object for WRITE>
; CA7: B904000000 MOV ECX, 4
; CAC: 896BFC MOV [EBX-4], EBP
; CAF: 8BEB MOV EBP, EBX
; CB1: FF5005 CALL DWORD PTR [EAX+5]
; CB4: 7302 JNB L1
; CB6: 8BE3 MOV ESP, EBX
; CB8: L1: 8B55F4 MOV EDX, [EBP-12]
; CBB: 31FF XOR EDI, EDI
; CBD: E84E979DF7 CALL #x2000410 ; GENERIC->
269デフォルトの名無しさん:2007/07/15(日) 03:29:59
; CC2: 7302 JNB L2
; CC4: 8BE3 MOV ESP, EBX
; CC6: L2: 81FA0B001002 CMP EDX, 34603019
; CCC: 750F JNE L4
; CCE: BA0B001002 MOV EDX, 34603019
; CD3: L3: 8D65F8 LEA ESP, [EBP-8]
; CD6: F8 CLC
; CD7: 8B6DFC MOV EBP, [EBP-4]
; CDA: C20400 RET 4
; CDD: L4: 8B55F4 MOV EDX, [EBP-12]
; CE0: BF04000000 MOV EDI, 4
; CE5: E848959DF7 CALL #x2000232 ; GENERIC--
; CEA: 7302 JNB L5
; CEC: 8BE3 MOV ESP, EBX
; CEE: L5: 8955F4 MOV [EBP-12], EDX
; CF1: 8BDC MOV EBX, ESP
; CF3: 83EC0C SUB ESP, 12
; CF6: 8B55F4 MOV EDX, [EBP-12]
; CF9: 8B05586C620A MOV EAX, [#xA626C58] ; #<FDEFINITION object for WRITE>
; CFF: B904000000 MOV ECX, 4
; D04: 896BFC MOV [EBX-4], EBP
; D07: 8BEB MOV EBP, EBX
; D09: FF5005 CALL DWORD PTR [EAX+5]
270デフォルトの名無しさん:2007/07/15(日) 03:31:13
; D0C: 7302 JNB L6
; D0E: 8BE3 MOV ESP, EBX
; D10: L6: 8B55F4 MOV EDX, [EBP-12]
; D13: 31FF XOR EDI, EDI
; D15: E8F6969DF7 CALL #x2000410 ; GENERIC->
; D1A: 7302 JNB L7
; D1C: 8BE3 MOV ESP, EBX
; D1E: L7: 81FA0B001002 CMP EDX, 34603019
; D24: 7507 JNE L8
; D26: BA0B001002 MOV EDX, 34603019
; D2B: EBA6 JMP L3
; D2D: L8: 8B55F4 MOV EDX, [EBP-12]
; D30: BF04000000 MOV EDI, 4
; D35: E8F8949DF7 CALL #x2000232 ; GENERIC--
; D3A: 7302 JNB L9
; D3C: 8BE3 MOV ESP, EBX
; D3E: L9: 8955F4 MOV [EBP-12], EDX
; D41: 8BDC MOV EBX, ESP
; D43: 83EC0C SUB ESP, 12
; D46: 8B55F4 MOV EDX, [EBP-12]
; D49: 8B05586C620A MOV EAX, [#xA626C58] ; #<FDEFINITION object for WRITE>
; D4F: B904000000 MOV ECX, 4
; D54: 896BFC MOV [EBX-4], EBP
; D57: 8BEB MOV EBP, EBX
; D59: FF5005 CALL DWORD PTR [EAX+5]
271デフォルトの名無しさん:2007/07/15(日) 03:32:07
; D5C: 7302 JNB L10
; D5E: 8BE3 MOV ESP, EBX
; D60: L10: 8B55F4 MOV EDX, [EBP-12]
; D63: 31FF XOR EDI, EDI
; D65: E8A6969DF7 CALL #x2000410 ; GENERIC->
; D6A: 7302 JNB L11
; D6C: 8BE3 MOV ESP, EBX
; D6E: L11: 81FA0B001002 CMP EDX, 34603019
; D74: 750A JNE L12
; D76: BA0B001002 MOV EDX, 34603019
; D7B: E953FFFFFF JMP L3
; D80: L12: 8B55F4 MOV EDX, [EBP-12]
; D83: BF04000000 MOV EDI, 4
; D88: E8A5949DF7 CALL #x2000232 ; GENERIC--
; D8D: 7302 JNB L13
; D8F: 8BE3 MOV ESP, EBX
; D91: L13: 8955F4 MOV [EBP-12], EDX
; D94: L14: E900FFFFFF JMP L0
; D99: 90 NOP
; D9A: 90 NOP
; D9B: 90 NOP
; D9C: 90 NOP
; D9D: 90 NOP
; D9E: 90 NOP
; D9F: 90 NOP
; DA0: CC0A BREAK 10 ; error trap
; DA2: 02 BYTE #X02
; DA3: 18 BYTE #X18 ; INVALID-ARG-COUNT-ERROR
; DA4: 4D BYTE #X4D ; ECX
;
NIL
272265:2007/07/15(日) 04:08:49
>>266
あーそゆことか。コードはちゃんと最適化されてるが GC 回りのバグですね。
SBCL の Windows 版はまだ試験的なものなんで安定してないんだよ。
Windows な開発者も少ないしね。ごめんね SBCL にかわってごめんね
273デフォルトの名無しさん:2007/07/15(日) 04:44:16
うーむ、GC周りのバグってことは、ちゃんとプロテクトされてない
ってことかな?結構いい加減ですね・・。

ちなみにclisp(clisp-2.41-win32-mingw-without-readline.zip)で
同じ様にcompileして実行しても、
*** - Program stack overflow. RESET
と出るんですけど、こっちは何とかなりませんかね。
274デフォルトの名無しさん:2007/07/15(日) 08:15:12
俺も初心者ですが、こんなので合ってますか。

(defun show-list (lst)
  (cond
    ((atom lst)
     (format t "~A" lst))
    (t
      (format t "[")
      (show-list (car lst))
      (show-rest (cdr lst)))))

(defun show-rest (lst)
  (cond
    ((null lst)
     (format t "]"))
    ((atom lst)
     (format t " . ~A]" lst))
    (t
      (format t " ")
      (show-list (car lst))
      (show-rest (cdr lst)))))
275デフォルトの名無しさん:2007/07/15(日) 12:19:07
>>273
clisp について、(declare (optimize (speed 3))) とかしたらどうでしょうか。
http://www.lispworks.com/documentation/HyperSpec/Body/d_optimi.htm

今手元に環境がないんでちょっとあれでなにですが。
276265:2007/07/15(日) 13:03:18
>>273
うーむ、experimental と明示されてる Windows 版をつかって、そゆこというのは
味付け前の料理をつまみ食いして「味が薄い!!」とシェフにクレームつけるようなもんだよ。
安定してる Linux/BSD プラットフォームでは動いてるし。原因も、そのメッセージだけじゃ
GC そのものかコンパイラの出力かは情報不足だしね。

>>275
ちょっとソースみてみたけど、CLISP のオプティマイザはそのケースを最適化しない。
選択肢としては商用のコンパイラを使うとか、スタイルを換えるとか…まぁ、素直に Scheme 使うといいと思います。
277デフォルトの名無しさん:2007/07/15(日) 13:42:14
>>275
(defun w(n)
(declare (optimize (speed 3)))
(labels ((x (n) (write n) (if (> n 0) (y (- n 1)) ))
(y (n) (write n) (if (> n 0) (z (- n 1)) ))
(z (n) (write n) (if (> n 0) (x (- n 1)) )))
(x n))) としても
*** - Program stack overflow. RESET
は変わりませんでした。((optimize (space 3))等も試しました。)
(compile 'w)や、(compile-file "w.lisp")(load "w.fas")も同じ。
ソース中やdoc\impnotes.htmlにdeclare 〜 speed
が見つからなかったので、対応してないのかな。

ちなみに
sbcl-1.0.7/src/runtime/gencgc.c:832 を見ると
gc_assert(alloc_region->start_addr == (page_address(first_page) + page_table[first_page].bytes_used));
で停止。ちょっと見ただけでは修正は無理そうです。
そもそも10000程度のループでgcが必要になるってのが、
よくわからない。本当に最適化が効いてるのか怪しいです。

例えば自作のscheme処理系では360セル程しか消費してないです。
その内 式'(w 10000)のコンパイル時に必要になるのがほとんどで、
式そのものを実行する準備に6セル、(w 10000)実行中は消費量ゼロです。
278デフォルトの名無しさん:2007/07/15(日) 14:25:37
よくわからない→これま末尾再帰の最適化が効いていないに違いない、ね…
SBCL 使ったことねーけど cons セルの消費は write のI/O 周りとか boxing だろ?

正直、末尾再帰に納得しても #' とか健全マクロとかで「〜は○○できないんですか?僕の自作 Scheme なら…」
とか無限ループになりそうなのであなたは Scheme 使っていたほうがいいと思います。
279デフォルトの名無しさん:2007/07/15(日) 14:55:31
(defun x (n) (write n) (if (> n 0) (y (- n 1)) ))
(defun y (n) (write n) (if (> n 0) (z (- n 1)) ))
(defun z (n) (write n) (if (> n 0) (x (- n 1)) ))
(x 10000)
(defun w(n)
(labels ((x (n) (write n) (if (> n 0) (x (- n 1)) )))
(x n)))
(x 10000)
(defun x(n) (write n) (if (> n 0) (x (- n 1)) ))
(x 10000)
どのパターンもおかしくなるみたいです。

というか今更気付いたんですが、
(gc)を単体実行しただけで戻ってこない場合がありました。
これはちょっと使えるというレベルではありませんね・・。

>>276
すいません。Winで使うことしか頭になかったので。
仕事で使えるかなと淡い期待を持ってたんですが、、
速さこそ正義なCLの思想は好きなんですが、
今までどうにも環境に恵まれないです。
cmuclが動く*NIXな仕事に着きたいなあ・・
280デフォルトの名無しさん:2007/07/15(日) 15:23:56
>>278
そうですね。確認したらwriteが馬鹿食いしてるみたいです。
nがfixnum範囲ならばOKな様です。

今回は代表的なCL処理系でも末尾再帰スタイルが
実用上無理な物があると確認できただけでも収穫でした。
まあ心配されなくともschemeに戻るでしょう。
281デフォルトの名無しさん:2007/07/15(日) 16:00:04
すげぇ結論だな。ふつうは開発中のものは実用に耐えないっすね、となりそうなもんだが。まぁ煽りたかっただけなんだろなぁ…
282デフォルトの名無しさん:2007/07/15(日) 16:04:13
結論ありきですから
283デフォルトの名無しさん:2007/07/15(日) 16:57:09
>>281
clispのことでは
事実をただの煽りとして受け取った時点で
これ以上何も言うつもりはないけどさ
284デフォルトの名無しさん:2007/07/15(日) 16:59:07
lisp脳の他にschemerには再帰脳の恐怖もあるよな…
285デフォルトの名無しさん:2007/07/15(日) 17:02:28
やっぱloopの話題になると荒れるね
286デフォルトの名無しさん:2007/07/15(日) 17:19:40
主要な処理系てclisp のことなのかよ。じゃあ sbcI については誤解はとけたのね。商用も大丈夫だし、わさわざ出来ない環境さがしてんのかとオモタョ ゴメンネ
287デフォルトの名無しさん:2007/07/15(日) 18:58:55
scheme最強
288デフォルトの名無しさん:2007/07/15(日) 19:00:19
>>287
氏ね
289デフォルトの名無しさん:2007/07/15(日) 21:06:04
いい加減にSchemeはゴミだって認めようよ。
290デフォルトの名無しさん:2007/07/15(日) 21:36:36
CLerから出てくる語彙が精一杯考えて氏ねとかゴミなのはよくわかったよ
291デフォルトの名無しさん:2007/07/15(日) 21:38:55
スルー推奨
292デフォルトの名無しさん:2007/07/15(日) 23:28:14
Schemeは子供用のおもちゃみたいなもの
293デフォルトの名無しさん:2007/07/15(日) 23:30:13
294デフォルトの名無しさん:2007/07/15(日) 23:40:38
RHELユーザが 「plan9はアプリが少ない」 って言ってるようなもの
295デフォルトの名無しさん:2007/07/16(月) 21:01:29
質問です。
2つのリストを、それぞれシンボルの集合とみなして、
左のリストと右のリストが一致するかどうかを判定し、
一致するなら右のリスト中のシンボルのそれぞれの
左に対応する位置インデックスを得たいのですが、
一個一個線形探索するより効率の良い方法はあるでしょうか?

(set-compare-pos '(a b c) '(b c a))
=>(0 2 1) ; 一致したのでそれぞれの位置インデックスを返す
(set-compare-pos '(a b c) '(b c a d))
=>nil ; 一致しない
296デフォルトの名無しさん:2007/07/16(月) 21:07:04
ごめんなさい間違えました。
(set-compare-pos '(a b c) '(b c a))
=>(2 0 1) ; 一致したのでそれぞれの位置インデックスを返す 。
これの意味は、
左の集合のaは、右の集合の2番目にある
左の集合のbは、右の集合の0番目にある
左の集合のcは、右の集合の1番目にある
です。
297デフォルトの名無しさん:2007/07/16(月) 22:19:15
>>295
ハッシュテーブル使えば線形時間でできるんじゃないかな
298297:2007/07/16(月) 22:27:48
重複がある可能性は考えてないけどこんなもんかな。
集合が一致してなきゃいけないってとこでややこしくなった。

(defun set-compare-pos (s1 s2)
  (let ((table (make-hash-table :test 'eq)))
    (dolist (x s1)
      (setf (gethash x table) nil))
    (do ((c 0 (1+ c))
         (s s2 (cdr s)))
        ((null s))
      (if (cadr (multiple-value-list (gethash (car s) table)))
          (setf (gethash (car s) table) c)
        (return-from set-compare-pos nil)))
    (mapcar (lambda (x) (or (gethash x table)
                            (return-from set-compare-pos nil)))
            s1)))
299デフォルトの名無しさん:2007/07/16(月) 22:57:19
ごめんなさい重複は無い物と考えてくださって結構です。
よって、一致する条件では左右の集合は同じ長さになります。
hashテーブルの存在忘れてました!
ありがとうございます。
300デフォルトの名無しさん:2007/07/17(火) 00:26:34
300ゲットー
>>274
良さそうだ。ま、実質同じだけど、ちょっと手抜きで関数一個で書けばこんなかな。
(defun fn (s)
(if (atom s)
(format t " ~a" s)
(progn (format t "[")
(fn (car s))
(mapcar #'fn (cdr s))
(format t "]"))))
301デフォルトの名無しさん:2007/07/17(火) 01:41:21
>>300
(fn '(a . b)) が失敗しちゃうよ。
302300:2007/07/17(火) 21:01:51
>>301
見落としてました……出なおしてきますorz
303デフォルトの名無しさん:2007/07/18(水) 22:34:36
>>98と同じ質問なのですが

CommonLispでCGIを書きたいのですが、
requireすると標準出力にダラダラと出力されてしまって
(何かコンパイルとかシステムをロードうんぬんみたいなメッセージ)
CGIなのでそれがHTML画面に表示されてしまいます。どうすべきでしょうか?

CGI自体はshで、

sbcl --noinform --load hoge.fasl

としています。

eval-whenとかを使えばよいのではないかと思いついて、
(eval-when (:compile-toplevel) (require ...))
とか、試してみたんですが、エラーになってしまう模様。
:load-toplevelでは意味ないですよね??load時にrequireしたら結局出力が出てしまう・・・

どうすべきなんでしょうか?そもそもeval-whenは関係ない?
304デフォルトの名無しさん:2007/07/18(水) 23:00:28
何回か出ているが、SBCL で CGI というのはオススメできない。
FastCGI にするか、mod_lisp をつかうか、huchentoot をつかうか、
ソケット経由でリクエストを SBCL プロセスに投げる CGI を C で書くとか
いろいろやりかたはあるけど、SBCL そのものを CGI として呼び出すのはやめとけ。
無理矢理強行しても Java で CGI とか Rails/CGI みたいな悲しいパフォーマンスになる。
305デフォルトの名無しさん:2007/07/18(水) 23:04:50
で、 require のメッセージを出したくない場合は、必要なものを全部 require した状態で
(save-lisp-and-die "hoge.core") としてイメージを生成して起動時に
sbcl --core hoge.core --noinform --load ... とかする。
しつこいかもしれないが、SBCL そのものを CGI として呼び出すのはやめとけよ。
スケーラビリティからインタラクティブなプログラミングのメリット台無しまであらゆる意味でオススメできない。
306デフォルトの名無しさん:2007/07/19(木) 00:29:12
一般論として、いまどき CGI というもの自体あまりお勧めではない
307デフォルトの名無しさん:2007/07/19(木) 02:50:20
じゃあ何よ
308デフォルトの名無しさん:2007/07/19(木) 04:18:14
あ・・・あじゃ・・・・


(↓ここで「アジャコング」とか書こうと思ったけどやるせなさ過ぎて止める奴)
309デフォルトの名無しさん:2007/07/19(木) 05:32:01
アジャコンゲ
310デフォルトの名無しさん:2007/07/19(木) 07:32:57
つaserve
sbclでちゃんと動くかは知らないけど。
311デフォルトの名無しさん:2007/07/19(木) 18:27:27
ここで満を持して kahua 登場! うわなにをs
312デフォルトの名無しさん:2007/07/19(木) 22:17:54
何もシネーよ
313デフォルトの名無しさん:2007/07/19(木) 22:53:41
Kahua って 304 のいう
> ソケット経由でリクエストを SBCL プロセスに投げる CGI を C で書くとか
に相当するのかな?
314デフォルトの名無しさん:2007/07/20(金) 03:03:43
しない
315デフォルトの名無しさん:2007/07/27(金) 18:44:26
ずいぶん前に、Windows版のsbclで日本語(sjis)が使えるようになったって
うわさを聞いたのですが、今使おうとしてもエラーが出ます。
うわさはデマだったのでしょうか?
316デフォルトの名無しさん:2007/07/27(金) 18:46:41
心のきれいな人にしか使えないんです
317デフォルトの名無しさん:2007/07/27(金) 19:16:56
そういうこと
318デフォルトの名無しさん:2007/07/27(金) 19:31:30
>>315
死ね
319デフォルトの名無しさん:2007/07/28(土) 01:20:00
>>318
こういうひとには使えません
320デフォルトの名無しさん:2007/07/29(日) 23:04:55 0
(setf *trans-code*
'(("add" . #'(lambda () (format t "add")))
  ("sub" . #'(lambda () (format t "sub")))
  ("mul" . #'(lambda () (format t "mul")))
  ("xor" . #'(lambda () (format t "xor")))))

(setf x (cdr (assoc "add" *trans-code*
:test #'string=)))

(funcall x)

こうすると"add"と表示されることを期待したのですが,
FUNCALL: #1=#'(LAMBDA NIL (FORMAT T "add")) is not a function name; try using a symbol instead
[Condition of type SIMPLE-TYPE-ERROR]
となってしまいます.これは何がおかしいのでしょうか?
321デフォルトの名無しさん:2007/07/29(日) 23:26:53 0
>>320
#' が ' の中にあるのでクォーティングされてしまっておるのだね。
`(("add" . ,#'(lambda ...
みたくするべし。
322デフォルトの名無しさん:2007/07/30(月) 12:22:00
>>321
ありがとうございました.追加で質問したいのですが,
なぜ>>320のコードではうまくいかないのか良くわかっておりません.
できれば解説などを加えていただければ...おねがいします.
323デフォルトの名無しさん:2007/07/30(月) 20:52:26
>>322
replで一行づつ打ちこめば自明じゃないか?
324デフォルトの名無しさん:2007/07/30(月) 20:55:40
>>322
(print x) して両者を比べてみよう
CLISP だったらこうなる

#'(LAMBDA NIL (FORMAT T "add"))
#<FUNCTION :LAMBDA NIL (FORMAT T "add")>

ちょっとわかりにくいかもしれないけど上は
(FUNCTION (LAMBDA NIL (FORMAT T "add")))
というリストで、下はクロージャ。
325デフォルトの名無しさん:2007/07/30(月) 21:33:37
>>322
#' とか ' とかってのは省略系にすぎないことを思い出そう。
あとは自分が read や eval になった気分でよく考えてみよう。
326デフォルトの名無しさん:2007/07/31(火) 00:04:11
            ∩_
           〈〈〈 ヽ
          〈⊃  }
   ∩___∩  |   |
   | ノ      ヽ !   !
  /  ●   ● |  /
  |    ( _●_)  ミ/ <こいつ最高にアホ
 彡、   |∪|  /
/ __  ヽノ /
(___)   /
327デフォルトの名無しさん:2007/07/31(火) 00:33:32
とは言っても俺ほどじゃないと思うけどな
328デフォルトの名無しさん:2007/07/31(火) 00:47:14
CommonLispでGUI作るときってどういう風にしてるの?
329デフォルトの名無しさん:2007/07/31(火) 00:51:28
GUIなんかいらねーよ
330デフォルトの名無しさん:2007/07/31(火) 01:13:00
>>328
CLX が最強
331デフォルトの名無しさん:2007/07/31(火) 08:11:15
なんか荒れまくってるなぁ。 >>328 商用の処理系は GUI ライブラリがついてくる。Allegro や LispWorks には GUI ビルダーも附属してるね。
フリーの処理系は Tcl/Tk とか Win32 API とか CLX とか OpenGL とか SDL みたいな低レベル API でがんばる。

332デフォルトの名無しさん:2007/07/31(火) 11:28:52
どこもかしこも夏の香りが漂ってるな
333デフォルトの名無しさん:2007/07/31(火) 11:46:33
フリーの処理系はffiがぶっ壊れてるから使い物にならんよ
334デフォルトの名無しさん:2007/07/31(火) 11:46:52
>>328
OpenMCL なら Cocoa が使えたと思う
335デフォルトの名無しさん:2007/07/31(火) 12:03:04
>>333
ドザ乙
336デフォルトの名無しさん:2007/07/31(火) 16:51:37
>>333
フリーの処理系はソースあるんだから自分で直せばいいじゃん
337デフォルトの名無しさん:2007/08/01(水) 01:02:14
おまいらありがとう。
>Tcl/Tk とか Win32 API とか CLX
>OpenMCLならCocoa
この辺は分かるけど
>OpenGL とか SDL
この辺になると自前でウィジェット作るの?
338デフォルトの名無しさん:2007/08/01(水) 03:20:31
探せばいろいろあるらしいぜ。探してない俺にはわからんが。
339デフォルトの名無しさん:2007/08/01(水) 09:37:29
そういえば McCLIM の事を忘れてた。
一応、標準 GUI ライブラリになる事を狙ってたんだよね。
340デフォルトの名無しさん:2007/08/01(水) 17:49:10
{x=a} begin y=x; x:=x+y end{x=2a} を証明せよ。
341デフォルトの名無しさん:2007/08/02(木) 22:23:54
ワッハッハwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
342デフォルトの名無しさん:2007/08/03(金) 14:40:26
LispのGCの様子をヴィジュアルに見せてくれるツールとか
そういうものってないのですか?
自分のプログラムでGCがどんな風に動いてるのか見てみたいのですが...
343デフォルトの名無しさん:2007/08/03(金) 16:04:15
大昔の話だが、中西先生のAPPLE LISPは見えたな。APPLE IIのエミュレータで動かんかな?w
344デフォルトの名無しさん:2007/08/04(土) 00:20:21
>>315
うわさだかデマだかを流した張本人です。
どんな環境でどのようなエラーが出るのでしょうか。
最近 2ch はあまり見てないので、sbcl-devel@ か、英語が苦手なら俺宛に
メールを貰えるとありがたいです。

>>316-317 >>319
以前手元でテストした時はちゃんと使えたので、心がきれいでなくても平気だと
思います。
345デフォルトの名無しさん:2007/08/04(土) 00:29:32
心の汚い俺でも安心だな
346デフォルトの名無しさん:2007/08/04(土) 02:52:20
>>342
和田先生はGCルーチンをデバッグするとき、
printf()を使うところまでは一般人同様なのだが、
それで出力するのは実はPostScriptで、
consセルが増えたり減ったりする様子を
ビジュアルに把握しながらデバッグしてた、という話を聞いたことがある。
347315:2007/08/04(土) 02:54:56
>>344
WindowsXP sp2でバージョンは1.0.6のインストーラー版です。
症状は、コンソール上で実行したときには
* (print "あ")

"あ"
"あ"
*
と日本語が使えるのに、(print "あ")とだけ書いてあるmain.lispを用意して、
"C:\Program Files\Steel Bank Common Lisp\1.0.6\sbcl.exe" --load main.lisp
とすると、
This is SBCL 1.0.6, an implementation of ANSI Common Lisp.
More information about SBCL is available at <http://www.sbcl.org/>.

SBCL is free software, provided as is, with absolutely no warranty.
It is mostly in the public domain; some portions are provided under
BSD-style licenses. See the CREDITS and COPYING files in the
distribution for more information.

This is experimental prerelease support for the Windows platform: use
at your own risk. "Your Kitten of Death awaits!"
348デフォルトの名無しさん:2007/08/04(土) 02:55:49
debugger invoked on a SIMPLE-ERROR:
Error during processing of --eval option (LOAD #P"main.lisp"):

can't happen
This is probably a bug in SBCL itself. (Alternatively, SBCL might have been
corrupted by bad user code, e.g. by an undefined Lisp operation like
(FMAKUNBOUND 'COMPILE), or by stray pointers from alien code or from unsafe
Lisp code; or there might be a bug in the OS or hardware that SBCL is running
on.) If it seems to be a bug in SBCL itself, the maintainers would like to
know about it. Bug reports are welcome on the SBCL mailing lists, which you
can find at <http://sbcl.sourceforge.net/>.

Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.

restarts (invokable by number or by possibly-abbreviated name):
0: [CONTINUE] Ignore and continue with next --eval option.
1: [ABORT ] Skip rest of --eval options.
2: Skip to toplevel READ/EVAL/PRINT loop.
3: [QUIT ] Quit SBCL (calling #'QUIT, killing the process).

((LAMBDA (SB-IMPL::E)) #<SB-INT:BUG {A60A9D9}>)
0]
となる、というものです。
>英語が苦手なら俺宛にメールを貰えるとありがたいです。
メールしようにもアドレスが分かりません。
349デフォルトの名無しさん:2007/08/04(土) 10:45:16
>>347
1.0.8 では直ってます。
Windows 版は
> This is experimental prerelease support for the Windows platform: use
> at your own risk. "Your Kitten of Death awaits!"
とあるように、まだ試験版なので、配布されてるバイナリは bootstrap 用
くらいに考えておいてください。
350デフォルトの名無しさん:2007/08/04(土) 21:05:27
なぁ、>>1のパワーズって誰だ??
351デフォルトの名無しさん:2007/08/05(日) 01:26:01
>>346
かっこいい
352デフォルトの名無しさん:2007/08/05(日) 06:57:04
CLOS の良い日本語解説書ってないかな?
bit別冊 Common Lisp オブジェクトシステム -- CLOSとその周辺
というのがいいらしいのだが、絶版で
ttp://www.fukkan.com/fk/VoteDetail?no=20616
あと、1 桁のところで、復刊リクエストまで行ってないんだ…orz
353デフォルトの名無しさん:2007/08/05(日) 08:48:30
また懐かしい本だな…。今時売れねーんじゃねーか?
仕組はブラックボックスのままな HowTo 本は売れる世の中で、
メソッド探索のアルゴリズムだの実装まで触れてるような本が売れるとは思えん。
学生時代に読んで、いきなり「CLOS ではカプセル化なんてどうでもいいんですよ」的な出だしで
カルチャーショックを受けた経験あり。
354デフォルトの名無しさん:2007/08/05(日) 10:01:04
>>352
俺はもう投票済みだわ
あと6人!
355デフォルトの名無しさん:2007/08/05(日) 19:53:20
>>353
個人的には実装まで触れてるというのは、
単なる HowTo なんかよりよほど役立つと思うが、
CLOS 自体の需要が微妙だよな。
Ruby の Matz も推薦とか書けば、Ruby の勢いに乗って売れないか?
売れないか…
356デフォルトの名無しさん:2007/08/05(日) 22:11:48
ところでCLOSってなんて読むの?
今まで「くろす」って読んでたんだけど昨日のLLだと「しーろす」って言ってる人がいた。
357デフォルトの名無しさん:2007/08/05(日) 22:25:49
>>356
どっちでもいい、と件の本には書いてあったよ。
358デフォルトの名無しさん:2007/08/05(日) 22:35:07
359デフォルトの名無しさん:2007/08/05(日) 22:38:00
>>356
俺も「しーろす」と読んでるよ。
今まで誰とも CLOS の話をした事が無いから勝手読みだけど。
360デフォルトの名無しさん:2007/08/05(日) 23:30:07
CLOSはシーロスだと思う。
対話によるCommon Lisp入門という本の
第12話 オブジェクト指向プログラミングのはじめに、
「データ抽象の話を押し進めて行くとオブジェクト指向プログラミング
という現代的で実用性の高いプログラミング手法となります。
Common LispにはCommon Lisp Object System(CLOS,シーロス)
という機能が有り,Lisp流のオブジェクト指向プログラミングを可能にしています」
と書いてあるから。
361デフォルトの名無しさん:2007/08/05(日) 23:43:55
ttp://www.amazon.co.jp/dp/4274128598/
これが小さくて読みやすかったので
良いと思ったんだけど
同意された事が無い
362デフォルトの名無しさん:2007/08/06(月) 00:17:05
クロスじゃない?
C−LOS って感じに言葉が別れていないし
シーロスじゃどう考えても変だ
つーかどこかでクロスって注釈振ってある本読んだことあるぞ
363デフォルトの名無しさん:2007/08/06(月) 00:17:56
どう考えても変だとは思わない
364デフォルトの名無しさん:2007/08/06(月) 00:21:30
>>352
↓が定番だったんだが、これも絶版か。大事にしよう。
http://www.amazon.co.jp/dp/4810180131
365デフォルトの名無しさん:2007/08/06(月) 00:22:54
>>363
CMOS をシーモスと読むのと同じ感覚で言っちゃってる
あれは Complementary MOS だから良いけど COMON LISP の COMON で切るのは不自然
366デフォルトの名無しさん:2007/08/06(月) 00:25:26
出版社自体が無くなっちゃったね
367デフォルトの名無しさん:2007/08/06(月) 00:26:18
いっそおまいらCLOS本書け
368デフォルトの名無しさん:2007/08/06(月) 00:26:23
>>366>>364

>>365
別に不自然とは思わない
369デフォルトの名無しさん:2007/08/06(月) 00:33:33
どっちでもいいって書いている文献があるというのに
お前らは何を決めようとしているんだ?
だいたい外国人は日本人みたいに発音とかこだわらんよ。適当。
370デフォルトの名無しさん:2007/08/06(月) 00:43:20
「苦労す」 というダジャレがあるから
おれはクロース派
371デフォルトの名無しさん:2007/08/06(月) 00:46:36
シーエルオーエスじゃだめなのか?
372デフォルトの名無しさん:2007/08/06(月) 00:49:17
373デフォルトの名無しさん:2007/08/06(月) 00:55:43
>>368
不自然と思わない根拠は?
似たような例をあげて貰わないと
374デフォルトの名無しさん:2007/08/06(月) 01:02:16
>>373
不自然と思う根拠を理解できない



ってきりがないぞ。>>369が言うようにどっちでもいいんだよ。
どちらかを不自然と思うのは神経症。
375デフォルトの名無しさん:2007/08/06(月) 01:02:37
最近こことか眺めているんだがCLのコードはどうも長くなってしまうような
ttp://ja.doukaku.org/
376デフォルトの名無しさん:2007/08/06(月) 01:06:43
>>374
>どちらかを不自然と思うのは神経症。

俺もそう思う。最近この手のやり取りが増えてる様な気がするが、どうしてだろう…
377デフォルトの名無しさん:2007/08/06(月) 01:10:02
>>374
根拠は提示されているでしょ
意味のある単語を途中で切って分けている
正式ではどちらでもOKだろうが不自然なことは普通理解出来るはず
これが不自然じゃないというなら自然と思える、普通に使っている必要がある
自分は思いつかない、逆ならいくらでも思いつく、SRAM とか
だからそれを教えてくれと聞いているんだけど
これでも理解出来ない?

神経症とかはまぁ別にかまわないよ
378デフォルトの名無しさん:2007/08/06(月) 01:16:32
夏なんだね
379デフォルトの名無しさん:2007/08/06(月) 01:37:15
MPEG(Moving Picture Experts Group)
380デフォルトの名無しさん:2007/08/06(月) 01:45:53
JSON(JavaScript Object Notation)
381デフォルトの名無しさん:2007/08/06(月) 01:47:42
OLAP(OnLine Analytical Processing)
382デフォルトの名無しさん:2007/08/06(月) 01:57:24
すみませんでした
いっぱいありました
383デフォルトの名無しさん:2007/08/06(月) 05:42:34
slimeのビデオを見てたら途中ミニバッファからコマンド
を送っているところがあったのですが、これはslime、処理系
どちらに対して送っていることになるのですか。

helpと打つとslimeのヘルプが表示されるようですし、
change-packageと打つとパッケージが変わるようなので。

また、ミニバッファのCOMMAND:というプロンプトはどの
キーにバインドされているのでしょうか
(コマンド自体はEmacsの機能?)
一応、マニュアルを見てみたのですがこの辺に触れていなかった
ので質問させていただきました。

CLOSで盛り上がってるところすみません。
384デフォルトの名無しさん:2007/08/06(月) 07:53:25
>>375
「無駄に」長いと思うなら直してやれば?俺はコードの圧縮はアセンブラでなら
楽しいけど Lisp のコードを圧縮するよりは見易いほうがいいな。

>>383
, キーだよ。これは SLIME のコマンドだけど、 SLIME が処理系に SWANK 経由で
コマンド送るので change-directory とか処理系も反応する。
385デフォルトの名無しさん:2007/08/06(月) 21:21:16
383です。

> SLIME が処理系に SWANK 経由で
なるほど、そういうことですか。

私の環境 WinXP+Emacs 22.0.50.1+SLIME 2006-12-12 ですが
change-directory 反応してくれました。

384さん ありがとうございました。
386デフォルトの名無しさん:2007/08/06(月) 21:30:54
383です。

忘れてました。SBCL 1.0.6 です。

387352:2007/08/08(水) 00:21:05
多分このスレを見てくれた人だと思うんだが、何人か投票していただいたようで、thx
票数表示が会員限定なんで具体的な数は書かないけど、あと、数票で 100 票です。
登録に個人情報が要るんでめんどくさいんだけど、もし良かったら、投票してやってください。
388デフォルトの名無しさん:2007/08/09(木) 11:40:39
恥を忍んでおたずねします。
最近、Lisp始めたばかりなのですが、
SBCLで関数のパラメータ(引数一覧)を出力する関数が
あるようなのですが、
(documentation 'hoge 'function)
するとパラメータではなく、関数自体の説明しか出てきません。
SBCLのみの機能みたいなのでmanualに書いてあるだろうと
目を通しましたがわかりませんでした。
出力の仕方を教えていただけると幸いです。
389デフォルトの名無しさん:2007/08/09(木) 18:25:08
390デフォルトの名無しさん:2007/08/09(木) 21:06:13
>>389
ありがとうございました
391デフォルトの名無しさん:2007/08/12(日) 10:40:21
closの読み方はクロスでもシーロスでもok. この辺は、ukの大学のサイトにあがってる
closのチュートリアルの冒頭に読み方として2つがあげられてるくらいです。
392デフォルトの名無しさん:2007/08/12(日) 10:47:10
これのこと
http://www.aiai.ed.ac.uk/~jeff/clos-guide.html
>CLOS stands for Common Lisp Object System and is pronounced "see loss" or "kloss".
393デフォルトの名無しさん:2007/08/12(日) 11:05:46
発音記号ってネイティブはあんま知らなかったりするのか?
394デフォルトの名無しさん:2007/08/12(日) 11:17:15
むしろ発音記号がその言語を全然知らない人でも理解できる用じゃね?
自分の母国語の発音を発音記号で理解してる奴はあまりいないんじゃないか。
ネイティブ向けの辞書でも発音記号じゃなくて「そう読めるスペル」で
示してるものもあるよ。その方が発音記号よりもピンときやすいのは自然だろう。
395デフォルトの名無しさん:2007/08/12(日) 12:38:09
>>393
言語学とかの専門家でないと知らなかったりする。
日本のように義務教育で教えている国は珍しいのではないかな。
396デフォルトの名無しさん:2007/08/12(日) 13:23:37
>>395
言語学の専門家が使うのはIPAだし、
日本の義務教育で教えている、辞書業界(?)の記号とは若干違うと思うのだが。
397デフォルトの名無しさん:2007/08/12(日) 13:25:48
日本語をIPAで書ける日本人がほとんどいないのと同じだな
398デフォルトの名無しさん:2007/08/12(日) 13:43:02
日本語だと仮名で書けば問題ないし、実際辞書でもそうなってるじゃん。
399デフォルトの名無しさん:2007/08/12(日) 13:59:07
>>398
確かに大抵それで何とかなる。
それは英語も同じで、>>392みたいにして発音を表せる。

細かいことを言い出すとカナでは足りない。
「ラクトース」と「ラクロス」では「ク」の発音が違うとか。
400デフォルトの名無しさん:2007/08/12(日) 14:03:52
日本語は言文一致したから、
それをしてない英語とそのまま比較はできんかと。
まあ、板違いだからこのくらいにしといた方がいいかもしれんが。
401デフォルトの名無しさん:2007/08/12(日) 14:59:08
>>398
日本語学習者にとってはそうでもない。
同じ「ん」でもnとngとか。
402デフォルトの名無しさん:2007/08/12(日) 22:03:25
おー、俺でCLOS本復刊リクエスト100人になりましたよ。
403デフォルトの名無しさん:2007/08/13(月) 00:25:07
祝!
404デフォルトの名無しさん:2007/08/13(月) 00:39:00
>>402
祝ってやる
405デフォルトの名無しさん:2007/08/13(月) 01:09:07
>>404
一瞬「呪ってやる」に見えた。
406デフォルトの名無しさん:2007/08/15(水) 09:36:04
質問です。
関数型言語って
有る値の集合を有る値の集合へもっていく方法を
記述すると考えてよろしいのでしょうか?
407デフォルトの名無しさん:2007/08/15(水) 09:53:28
その「値」に「関数」っつーのも含まれてるけど、
まあそんな感じだろう。
408デフォルトの名無しさん:2007/08/15(水) 12:11:57
>>406
集合とか意味不明
テンプレ読め
409デフォルトの名無しさん:2007/08/15(水) 13:05:21
>>406
スレ違い
410デフォルトの名無しさん:2007/08/15(水) 15:25:00
写像って意味だっしょ
411デフォルトの名無しさん:2007/08/15(水) 16:32:48
406はなかなか良い筋行ってんじゃネーノ?
http://karetta.jp/book-node/gauche-hacks/023107
412デフォルトの名無しさん:2007/08/15(水) 18:13:22
(a b c)
という任意の長さのListがあげられたとき
このすべての組み合わせをリストとして出力する
(a b c ab ac ba bc ca cb)
このようなプログラムって皆さんどうやって書きます?
413デフォルトの名無しさん:2007/08/15(水) 20:14:40
>>411
自演乙
414デフォルトの名無しさん:2007/08/15(水) 20:17:27
そんなもの書かない
415デフォルトの名無しさん:2007/08/15(水) 22:50:36
そんなものが書きたくなったら全体の設計を見直すかな
416デフォルトの名無しさん:2007/08/16(木) 00:30:55
AutoLISPってどうなの?
417デフォルトの名無しさん:2007/08/16(木) 02:18:55
どうもしない
418デフォルトの名無しさん:2007/08/16(木) 02:21:21
>>412
「すべての組み合わせ」の意味が不明確。
abc とか cba とかが入らない理由は?
419デフォルトの名無しさん:2007/08/16(木) 02:34:39
もういいじゃん
420デフォルトの名無しさん:2007/08/21(火) 07:52:33
Lisp処理系ムズすぎ
適当に構造体でリスト作って、
S式パーサ作って、
関数名で条件分岐してリストのメンバをいじくれば良いと思ってたのに
421デフォルトの名無しさん:2007/08/21(火) 09:35:35
そんな感じで出来ちゃうと思うけどなぁ。
もちろん「優れた処理系」を作るのは(他の言語と同じく)難しいし、
「Common Lispの処理系」を個人で作るのはちょいと無謀だけれども、
この界隈の人間がよくやる「楽しく作るマイLisp処理系」程度なら・・・。
クロージャで少々頭ひねるくらいでは。
422デフォルトの名無しさん:2007/08/21(火) 09:41:49
>>420
ここら辺参考にならないかな

L2Lisp in Ruby(インタープリタ)
ttp://codezine.jp/a/article/aid/1492.aspx

JavaScriptでつくるSchemeインタプリタの基礎の基礎(lisp, js, webdev, webapp)
ttp://codezine.jp/a/article/aid/739.aspx

Javaで作るオリジナル言語:ITpro
ttp://itpro.nikkeibp.co.jp/article/COLUMN/20060922/248738/
423デフォルトの名無しさん:2007/08/21(火) 11:04:02
>>420
そんなに難しいかい?
8ビットマシンの頃でも基本の処理系はポイポイ作れた記憶があるんだけど。
実行効率とか下段をVMでとかにすると結構しんどいかもしれないけが俺Lispならそんなに難しいものじゃ無いはずなんだけど。

まさかCommonLisp全部みたいな話とか継続入れたいとか言うスタック操作がマンドクサイこと言うと別かもしれんが。
424デフォルトの名無しさん:2007/08/21(火) 13:03:56
>>421,422,423
http://www.jsk.t.u-tokyo.ac.jp/~inaba/soft4/soft4-xlisp/soft4-xlisp.html
ここ読んでるんですけれど、即死しそうです
JAVAとかJavaScriptとかRubyで作ると比較的簡単なのかなぁ
425デフォルトの名無しさん:2007/08/21(火) 13:58:15
ttp://www.okisoft.co.jp/esc/go.html
俺はここ見ながらC++で作った。
Javaで説明されてるけど、JavaからC++への脳内翻訳はまぁ、それほど難しくないし。
426デフォルトの名無しさん:2007/08/21(火) 21:56:36
>>424
それで楽になるのはGCだけじゃないかと思う。
427デフォルトの名無しさん:2007/08/21(火) 22:05:53
俺 Lisp ネタは本スレで。一応ここは Common Lisp 入門スレなので。

俺 Lisp ってーのはよ、一週間もまじめに取り組めばできちゃう。
で、 99% はやったーできたーの後に「Lisp をものにしたぞ」と勘違いしちゃう。
そこはスタート地点だという事を心してほしい。ほんとに。
428デフォルトの名無しさん:2007/08/21(火) 22:22:23
CLTL読んでるけどでかい、でかすぎる。

でも楽しい。
429デフォルトの名無しさん:2007/08/21(火) 22:33:35
仕様なしで実装だけあるほうが良いという連中が信じられない。
現行バージョンとかそんな殺那的な基準でいいのか……
430デフォルトの名無しさん:2007/08/21(火) 22:55:46
>>429
少なくとも入門スレでは、言語の仕様が先か実装が先かなどというのは全く本質的な問題ではないと思うが。
431デフォルトの名無しさん:2007/08/21(火) 23:16:39
先とか後とかじゃなくて有無の話ね。
432デフォルトの名無しさん:2007/08/21(火) 23:50:55
>>428
てお?
433デフォルトの名無しさん:2007/08/22(水) 01:00:57
このスレでCLTLって言ったらCommon Lisp The Language ,Guy L. Steele Jr.じゃないの?
434デフォルトの名無しさん:2007/08/22(水) 11:10:27
>>428
仕様書(?)の癖に妙に饒舌なGLS節がたまらんよねw
435デフォルトの名無しさん:2007/08/23(木) 01:28:40
Practical Common Lisp 155ページなのですが、COPY-TREEで((1 2) (3 4) (5 6))を
複製したものとオリジナルが共通で参照するオブジェクトが数値の5,6とシンボルNILってのは
何故ですか?1,2,3,4と5,6の違いが判らないので教えてください
436デフォルトの名無しさん:2007/08/24(金) 01:12:49
>>435
それ、ここかLisp Schemeスレかで以前俺が話題にした気がする。
そんときは確かめてくれた人がいて著者の勘違いって話だったと思う。
過去ログ見て。
437デフォルトの名無しさん:2007/08/24(金) 22:19:43
どう勘違いしたんだ
438435:2007/08/25(土) 00:57:24
Peter Seibel本人にメールしてみました。
「混乱させてスマン、第3刷では直っているハズだから」とのことです。
439デフォルトの名無しさん:2007/08/25(土) 13:02:07
俺そういうメールに返信するバイトしてた。
440デフォルトの名無しさん:2007/08/25(土) 13:21:19
俺はメールしたと偽るバイトしてた。
441デフォルトの名無しさん:2007/08/29(水) 13:57:52
Emacs Lispでいう(string-to-int)ってCLispにないの?
442デフォルトの名無しさん:2007/08/29(水) 14:14:20
グハラムのANSI Common Lispを読んでいます
ループを再帰で書くサンプルが出てくるのですが
ループ数が多くなるとスタックがえらく積み上がっていくんじゃないか、
だとしたらループの実現としてはあまりいい方法ではないのではないかと
思うのですが、どうなんでしょう?
あくまで「こういう書き方もできるよ」という例なのでしょうか?
443デフォルトの名無しさん:2007/08/29(水) 14:28:08
>>442
ほとんど末尾再帰だろ
末尾再帰をループに展開できないコンパイラはぶっ壊れてる.
444デフォルトの名無しさん:2007/08/29(水) 15:15:52
>>441
parse-integer
445デフォルトの名無しさん:2007/08/29(水) 19:44:33
>>442
> グハラム
ちょっと入れ替えただけで急にイスラムな感じになるな。
446デフォルトの名無しさん:2007/08/30(木) 01:22:51
ではclispはぶっ壊れてると・・・
447デフォルトの名無しさん:2007/08/30(木) 02:07:22
コンパイルすれば末尾再帰をループ化する>CLISP
448442:2007/08/30(木) 02:11:41
レスありがとうございました
末尾再帰というものだったら問題ないんですね
少し気になったのですが
Lisp界ではよくあることなんですね
449デフォルトの名無しさん:2007/08/30(木) 02:30:23
450デフォルトの名無しさん:2007/08/30(木) 02:33:05
実際末尾再帰スタイルで書くつもりならSchemeで書いたほうがいい。
Common Lispのはあくまでも最適化オプションでしかないから過信できない。
451デフォルトの名無しさん:2007/08/30(木) 04:48:19
Schemeは式の評価順序が決まっていないのが嫌いなんだよね。(副作用させんなって言うのは無しね)
452デフォルトの名無しさん:2007/08/30(木) 07:46:50
>>450 Scheme はコンパイル関連機能があくまでもオプションでしかないから過信できません
453デフォルトの名無しさん:2007/08/30(木) 08:37:34
ていうか「過信」って言葉がそもそも、実際の在りよう以上のことを信じることであって、
Common LispだろうがSchemeだろうが隣のおばちゃんだろうが、過信しちゃいけないのは同じ。
454デフォルトの名無しさん:2007/08/30(木) 09:42:19
「xを過信してはいけない」という言い回しは、単純に過信を戒めてる訳じゃなくて、
「お前はxを過信している」とか「xは過信されがちだ」みたいな意味が入ってる。
455442:2007/08/30(木) 11:59:10
やっぱり使わない方がいいんですね
456デフォルトの名無しさん:2007/08/30(木) 12:08:19
>>455
時と場合による.
457デフォルトの名無しさん:2007/08/30(木) 12:14:39
>>455
lispのような抽象化の高いプログラミングで再帰
を使おうとしないとはかなり不幸だろう.

10年前ならいざ知らず,今はコンピュータのメモリもCPU性能も
有り余るほどある.その中で,ある程度効率を犠牲にしてでも,
抽象化のはしごを上ってわかりやすいアルゴリズムを記述できる
のであればそっちを優先すべきでは?
458デフォルトの名無しさん:2007/08/30(木) 13:06:02
>>455
まあ真面目に入門書の一冊も読むべきだね。
基本がぜんぜんなってない感じ。
459デフォルトの名無しさん:2007/08/30(木) 13:24:25
>>455
白黒はっきりさせたい性格なのだろうが、世の中そんなに単純には出来ていないのだ。
460デフォルトの名無しさん:2007/08/30(木) 13:38:57
>>455
ちなみに組込み屋の人ですか?
461デフォルトの名無しさん:2007/08/31(金) 02:00:35
455の人気が凄いw
462デフォルトの名無しさん:2007/08/31(金) 03:16:20
destructuring-bindの素敵な訳語を募集。
野田さんトコだと構造化代入ってなってるけど、`de-'の雰囲気がどこかに
消し飛んでるし`bind'って代入なのか?って気がしないでもない。
漏れの頭では脱構造束縛とか構造分解束縛とかしか思い浮かばないんだが、
やっぱり気持ち悪い?

OnLisp翻訳の偉業にケチをつけるつもりはまったくないのでそこんとこだけ
誤解のないよう。英語のまま何気なく読んでる文章をきちんとした
日本語に書き出そうとするのがこんなに面倒だとは思わなかった。
463デフォルトの名無しさん:2007/08/31(金) 03:27:09
`構造'意識しなくてもいいか。
分解束縛とか分配束縛とかで意味通じるかな。

連投で独り言スマン。
464デフォルトの名無しさん:2007/08/31(金) 05:56:15
独り言気持ち悪い
465デフォルトの名無しさん:2007/08/31(金) 07:30:18
http://practical-scheme.net/wiliki/wiliki.cgi?OnLispJa
>p.96 ほか (leque, 2007/04/14 21:40:45 PDT)
>「destructuring」の訳語を「分配」とすることにすこし違和感があります。
>destructuring-bind の lambda-list が単純なリストである場合はよいのですが、
>入れ子のリストになっているような場合も考えると、「分解」「脱構造化」といったような、
>構造(structure)を意識したような訳語の方がしっくり来る気がします。
>
>* これはGuy Steele本の和訳で採用されていた訳語に統一した結果です.
>ところでせっかく仔細にコメントをいただいているのに,
>単純なものしか目を通しておらず,申し訳ありません.
>いずれじっくり検討させていただきます.(野田)
466デフォルトの名無しさん:2007/08/31(金) 09:37:39
「パターンマッチ」でいいんじゃないかという気が
467flatline ◆r6EONKKhcc :2007/08/31(金) 10:00:52
>>462
ちなみに「構造化代入」という訳はあまり深く考えてつけたものではありません.

>>466
複数のパターンから選べないとパターンマッチとは言えないような気がします.
468466:2007/08/31(金) 10:30:40
そうですか?なんでだろう。
469デフォルトの名無しさん:2007/08/31(金) 11:29:00
俺もパターンマッチって感じがする。
マッチに失敗すればエラーになるし。
470デフォルトの名無しさん:2007/08/31(金) 18:30:16
>>462
気持ちはわかるが、destructuring-bind という固有のスペシャルフォーム名に
とらわれすぎの気がする。
まさか「なでしこ」みたいな日本語CLをつくろうって話じゃないんでしょ。
同種の概念に対する一般的なタームとしては分割代入とかじゃない?
471デフォルトの名無しさん:2007/08/31(金) 21:09:55
>>468
複数の候補からマッチするものを見つけるのがマッチだと思う
472デフォルトの名無しさん:2007/08/31(金) 21:11:04
>>462
deの雰囲気を残すべきだとは思わない。逐語訳にこだわりすぎでは?
473466:2007/08/31(金) 22:52:58
>>471
それだけがマッチングとは思えないなあ。
正規表現がマッチするしないって言い方があるけど、
あれは何かを複数の候補から見つけるわけじゃないでしょう?
474デフォルトの名無しさん:2007/08/31(金) 23:51:54
>>473
「マッチする」という言い方自体が、そもそも「マッチしない」場合の存在を前提にしているのでは?
そういう意味では正規表現も多くの場合は複数の候補から見つける操作だと思う。
475462:2007/09/01(土) 02:42:29
>>470
日本語CL作ろうなんて気は毛頭ありません。
でも見る人が見れば何やってんかバレバレなんですけどね。

>>472
逐語訳にこだわってるつもりはないんですが、Lisp/Schemeのコンテキストで
代入と束縛を同列に扱うのは違和感があると感じるのは僕だけかなぁ。
日本語ではどう表現するのが普通だ、みたいな一般的に受け入れられている
のはないんですかね。大体原著で読むのでその辺の感覚がわからんです。
476flatline ◆r6EONKKhcc :2007/09/02(日) 16:53:41
私はむしろ >>473 に賛成ですが,
>>467 の真意はむしろ
 「destructuring-bindを「パターンマッチ」と言ってしまうと,
 Ocaml, Haskellの方面から
 『複数の候補から選ぶこともできないのにそんな大層な呼び名をするとは!』と
 文句が来そうなので自粛した」
みたいな感じですかね.

つーかその後 §18.4で
「パターンマッチングは構造化代入(書籍では分配)の一般化だ」と続いているので...

束縛と代入については,レキシカル・スコープの何たるかを分かってコードが書ける人には
言葉の問題に過ぎず,大した違いではないと思います.
477flatline ◆r6EONKKhcc :2007/09/02(日) 17:02:45
そうそう,On Lispの第3刷が9月半ばに出るそうです.
(読者の方々からいただいた修正意見を反映してあります)

「売れた数だけLispの存在感が拡大している」と(粗っぽく)見積もるとすると
これは訳者として嬉しいことです.
実際,webをさ迷っていると,これまでLispに縁のなかった人もけっこう買ってくれているようですし.
(そういう人には終盤はテクニカルに高度過ぎると思いますが,
「Lisp Hackerのスタイル」的なものは伝わることを期待)
478デフォルトの名無しさん:2007/09/02(日) 17:26:50
>>477
Lispのなんたるかってあたりがかかれた本って古い書籍が多くてさらに尽く絶版だったりするから
ものすごくありがたかったんじゃなかろうかとおもう(対象想定読者層にとって)

まじめな話共立出版のbit別冊が売ってたら読むかもしれない層って多いと思うんだけどなぁ。
479デフォルトの名無しさん:2007/09/02(日) 17:28:49
>> 476
> 束縛と代入については,レキシカル・スコープの何たるかを分かってコードが書ける人には
> 言葉の問題に過ぎず,大した違いではないと思います.

レキシカルスコープの何たるかをわかってコードを書くに至っていない
入門レベルの読者が読むことを想定した場合は束縛と代入は使い分けるべき、でFA?
480デフォルトの名無しさん:2007/09/02(日) 22:46:13
レキシカルスコープの何たるかをわかってコードを書くに至っていない人には
縁のない話題だと思うが
481デフォルトの名無しさん:2007/09/02(日) 23:52:25
あんま流れと関係ないけど束縛だの代入だのより、スコープとエクステントの概念を叩き込むべき。
アセンブラと C を覚えて万能感に浸っていたかけだしのヘタレだった俺は、これを叩き込んでくれた師匠に本当に感謝している。

副作用だの破壊的操作だのは結局物理レベルではレジスタの値変更してんだからよー
キタナイ現実を見ないのが美しいってのは Schemer にゃーお似合いだが Lisper はそんな風になるべきではない。

つうか訳語は分配でいいような気がするけど…別に実際にバラすわけじゃなくて、元の構造の部分を変数に束縛するだけだし…
482デフォルトの名無しさん:2007/09/03(月) 01:18:14
>>481 は今でもなにもわかってない事がわかった
483デフォルトの名無しさん:2007/09/03(月) 05:50:47
ああ、それは二十歳くらいの頃によくかかる病気ですね。
自分の人間観察眼に根拠の無い自信持っちゃって、あちこちで誰かの言葉に触れては
「こいつはわかってない、俺にはそれがわかる」って小鼻をひくひくさせてしまうんです。
あと5年もすれば、思い出すだけで死にたくなる過去になりますよ。
484デフォルトの名無しさん:2007/09/03(月) 06:52:52
わかってるやつがなんでにちゃんなんかやってんだろ
485デフォルトの名無しさん:2007/09/03(月) 07:23:28
おまえのどうるいだけがにちゃんやってるわけじゃないからだよ
486デフォルトの名無しさん:2007/09/03(月) 07:34:54
>>485
君は集合の基礎を覚えた方がいい
ベン図とか
487デフォルトの名無しさん:2007/09/03(月) 08:05:32
まずは君がコミュニケーションの基礎を学ばないことには
488デフォルトの名無しさん:2007/09/03(月) 10:14:22
わかってない奴すべてを含む集合は果たして平穏無事であるか
489デフォルトの名無しさん:2007/09/03(月) 12:58:41
あるときっと。信じれば夢はきっと叶うさ。
490デフォルトの名無しさん:2007/09/03(月) 15:12:26
2ch で遊ぶのはいい加減にして、早く誰も読まない論文を書く作業に戻るんだ。
491デフォルトの名無しさん:2007/09/03(月) 16:19:32
論文を書くためにはネタを仕込まないとね。
それはともかく、Common Lispで書いたソフトをコンパイルしておいて
他の.exeから呼び出して実行するなんて使い方はできるものだろうか?
分かる人が居たら教えてくれ。

既存のGUIと通信を行うモジュールを流用して計算エンジン部分だけLispで作ってみたい。
あ、プラットフォームはその既存のGUIの関係でWindowsです。
492デフォルトの名無しさん:2007/09/03(月) 16:27:22
誰も読まない論文
ってのはなかなか哀愁を誘う良い言い回しであるなw
493デフォルトの名無しさん:2007/09/03(月) 16:45:25
ライトオンリー
494デフォルトの名無しさん:2007/09/03(月) 18:25:39
Lispって科学技術計算に向いてる?
495デフォルトの名無しさん:2007/09/03(月) 19:26:44
愛を育てるのには向いてる
496デフォルトの名無しさん:2007/09/03(月) 19:30:54
講座初日に眼鏡を忘れ、倫理学と論理学の教室を読み間違えた挙げ句、出席を取らない講師に突然愛を語られたみたいなものだろうか?>>495
497デフォルトの名無しさん:2007/09/03(月) 19:36:39
>>491
できる。教えてもらわないと出来ないような人には難しいかもしれないが。
498デフォルトの名無しさん:2007/09/03(月) 20:17:54
は?
499495:2007/09/03(月) 20:21:37
愛と AI をかけました………………
500デフォルトの名無しさん:2007/09/03(月) 21:53:12
>497 Thanx!
可能だと言う事がハッキリするだけでもやる気が出るよ。
何しろこっちはLispに関して全くの素人なので
これから勉強しながら方法を探すよ。

ところでそういう事に便利そうな商用Lisp
(Allegro Common Lispなど)を使えとか
言うんじゃないよね。あれ、高いからな。

自分ではKCLを使えばコンパイラが
Cのソースを吐いてくれるそうなので、
そっちをいじれば何とかなるかなと思っている。
501デフォルトの名無しさん:2007/09/03(月) 22:16:45
ACL は Express エディションならフリー。
ヒープ制限があるので大規模な処理は無理だが。

KCL は GNU に寄贈されてメンテナがかわりにかわって GCL (GNU Common Lisp)という
名前になってる。派生した ECL ってものある。

つうかソケットで通信とかなら C のソースがうんぬんは不要だと思うけど…。
502デフォルトの名無しさん:2007/09/03(月) 22:33:05
Lispworksを日本で購入できる場所ないのかな?
503500:2007/09/03(月) 22:47:13
>501
ACLのExpress editionはは使ってみようとしたんだが
なぜか私のデスクトッブにはダウンロード出来なかった。
試しに古いノートPCにやってみたらできたので
どうもIE7が邪魔してるような気がする。

GUIモジュールとの通信はソケットとかじゃなくて
単純に呼び出し時の引数渡しみたい。
まだ良く調べてないが。
504デフォルトの名無しさん:2007/09/03(月) 23:07:59
>>503
フーム…ちなみに C と Lisp の経験はそれぞれどれくらい?

あと、まずその GUI モジュールとやらについて一通り勉強するのが先だと思う。
今の状態だと、たとえば Lisp じゃなくて Python で〜ってケースでも
どこから手をつけていいかわかんない状態でしょ?まず、ターゲットをよく知らないとね。

大抵の C のライブラリは当然 C の関数呼び出し形式のインターフェースしかない。
他のシステム(Lisp に限らないよ。ネットワークのむこうの C のプログラムとかね)と繋ぐなら、通信部分は自分で作ることになる。
505491:2007/09/03(月) 23:10:52
あ、
「既存のGUIと通信を行うモジュール」と言うのは
GUI及びLAN経由で他のPCと通信する機能を
兼ね備えたモジュールがあってそこから
計算エンジンが呼び出される構成って事。

書き方が紛らわしかったね。
506503:2007/09/03(月) 23:42:18
>504
お察しの通りCでも大きなブログラムを一から書いた事は無い。
せいぜい教科書の演習問題レベルか他人の書いたブログラムを
ちょっと変更したくらい。Lispの経験はほとんどゼロ。

そんなレベルで難しい事をやろうとするなと言われそうだが
まあ、趣味でやってる事なので。

まずはLispで書いたソースをコンパイルして
他のEXEから呼び出す事が可能なモジュールを
作れるかどうかを知りたかったのよ。
507デフォルトの名無しさん:2007/09/04(火) 00:04:43
共有ライブラリを生成できる処理系はいくつかある。
有償なら ACL, LispWorks、無償なら ECL (GCL もできるのかな?使ったことないから知らん) あたりで可能。
Windows で使えるかは知らないけど。あと、この機能を使うにゃー C に加えて Lisp の知識も要求される。
つうわけで、技術的には可能だが、たぶんあなたの期待してるようなものじゃない。

残念ながら今の Lisp の世界では「Lisp から C のライブラリを呼び出す」のが一般的なんだよねぇ。
Foreign Function Interface といって、C のライブラリを Lisp から呼び出す機能。

ECL みたいに C のプログラムに埋め込んじゃえるタイプのもあるが、これをやるにも C と Lisp 両方の
知識が要求される。逆に知識があれば VB に埋め込んだりもできる:
http://www.cs.stevens.edu/~dlong/hacks/vbecl/index.php

とりあえず C か Lisp、どっちかはマスターしよう。Lisp ならこのスレで力になるよ。
508491:2007/09/04(火) 00:17:44
結局のところ、Lispの関数を呼び出す時のパラメータ形式と
(多分)Cが関数呼び出しする時のパラメータ形式を変換する
小さなモジュールを作って間に挟めばこの目的にはOKって事かな?

そうすればLispコンパイラが吐き出すCのソースはいじらなくても、
objの方をリンカーにかけてexe化するだけで良いのかな、多分。
509デフォルトの名無しさん:2007/09/04(火) 00:48:16
うーん、まず Lisp の側からつっこむとね、まず貴方はデザイン上の撰択をしないといけない。
ECL を使うと仮定すると次のような方法がある。

1. GUI ライブラリが DLL として提供されているなら FFI 経由で Lisp から使う
(この場合、コンパイラの出力をいじるとかは必要ない)
2. GUI ライブラリの機能をラップして DLL にして Lisp から使う
3. GUI ライブラリをソケットとか別プロセスから操作できるようにしたてて、Lisp からはそのインターフェースで操作する
4. ECL の機能をラップした DLL を作成して、それを C プログラムにロードして使う

4. しか眼中にないようだが、それは要求されるスキルも高く、かつあんまり楽じゃない。たとえば、Lisp の知識がないと
あるオブジェクトを管理しているのは Lisp の領域なのか C の領域なのか区別をつけることすら難しい(…と思うけど、どう?)。

あとは、C をはじめたばかりのようなので、プログラムといえばコンパイラでコンパイルして exe か dll にしたもの、
というイメージがあるんだろう。ECL で「コンパイルする」というと確かにネイティブコードを生成するが、それは
exe でも dll でもないんだ。(まぁ、実行形式や共有ライブラリも生成できるけど…)

> (compile-file "foo.lisp") ;; gcc でコンパイルしてネイティブコードを含む .fas ファイルを作成
foo.fas
> (load "foo.fas") ;; .fas をロード
510508:2007/09/04(火) 00:52:52
>507
そうですか、上で書いたような安直な方法は多分使えないと。どうしようかなー?
Lispから呼び出せるGUI&通信モジュールを自作するのは多分もっと大変だし。

あまり大変ならLispでエンジン書くのを諦めるしか無いかな?

最後にひとつだけ質問。
(商用Lispの付加機能じゃなく)一般的なLispシステムのコンパイラが吐く
objはそれ単体では自立したモジュール(exeやdll)には出来ないって事ですよね。
ガーベッジコレクションとかが欠けてるし。
511510:2007/09/04(火) 01:15:26
>509
ちなみに私が使おうと考えていたGUIは
ライブラリ形式ではなくて一固まりのモジュール(.exe)なのです。
それがdllを介してあるいは直接にエンジンを呼ぶ形式。
なのでこちらからは呼べなくて呼び出される一方なのです。
512デフォルトの名無しさん:2007/09/04(火) 01:33:31
まぁ、まず Lisp を勉強しようや…。C とは違う部分もあるんだから。

実行形式には「できる」。ただ、C のランタイムは libc や mcsvcrt としてシステムに既に存在している場合が多いけど、
Lisp のランタイムは普通のシステムには存在しないので配布物に含むことになる。
商用 Lisp はこの時に、コンパイラ機能とか配布物に要らないだろうという機能を削ったりできる。

CLISP で作成した .exe := ランタイム数メガ + プログラム部分 => 数メガ
ECL で作成した .exe := プログラムサイズ + libecl.dll (4Mくらい?)

SBCL とかはネイティブコードコンパイラを備えているため、ラインタイムとコアイメージはでかい。
10M を余裕で超える。C でいったら GCC がまるごとついてくるようなもんだからね。
513デフォルトの名無しさん:2007/09/04(火) 01:40:48
>>510
ふーんけったいなライブラリ(って言うの?)だね。いわゆるプラグイン形式って感じかなぁ。
すると DLL を与えるしか方法がない感じなのかな?
しかもインターフェース固定か。勘でいってるけど、あんまり Lisp のインクリメンタルな開発を活かす機会はなさそうかなぁ。
外からいじれるようにしたりして嬉しい?

直接エンジンを呼ぶってのはよくわからないな。見てみないとよくわからんね。非公開のやつなの?
514510:2007/09/04(火) 02:17:24
>512
実行形式にはできるんですね。
そりゃそうか、Basicでも出来たもんなあ。
配布イメージがでかくなるのは別に構いません。

>513
そうなんですよね。
良く考えたら既成のGUIモジュールから呼べるように
毎回コンパイルしてたらインクリメンタルな開発手法が
使えなくてLispを用いる意味があまりなくなりますね。

デバック用途のためのみであっても
GUIと通信モジュールは自作するしかないか?
で、最後に可能なら既存のリッパなGUIから呼べるように細工すると。

いや、いろいろ教えて頂いて有り難うございます。
515デフォルトの名無しさん:2007/09/04(火) 11:52:52
>>514
図表を扱う向きではないけどTKでよければwindowインターフェースはある。
リアルタイムに何か表示するならOpenGLのインターフェースもある。

なのでこれらで間に合う範囲ならそれ程困らないが、ポトペタなウィンドウモジュールが欲しいとなると
商用のを買わないとダメポ。


516デフォルトの名無しさん:2007/09/04(火) 14:07:03
Common Lispで書いたプログラムを起動してそれとソケットで通信するものを
DLLとして作成するというのはどうかな。
DLLの関数はそのプログラムにお伺いを立てて下されたお答をそのまま返す。
517デフォルトの名無しさん:2007/09/04(火) 15:13:18
CLでDLL作れるの?
518514:2007/09/04(火) 19:55:45
>516
それグッドアイデアですね。
そのやり方ならコンパイル前(Lisp処理系から起動)でも
コンパイル後(GUIから呼び出されて起動)でも
最悪DLLさえ作り分ければ、きっとうまく行きそうな気がします。

その方針でやってみる事にします。
皆さん、いろいろ有り難うございました。
Lisp絡みで分からない事が出て来たら
質問させて頂きたいので、
その時はまたよろしくお願いします。
519デフォルトの名無しさん:2007/09/06(木) 23:16:38
GoogleからLisp VMとOSが無料配布されるという夢を見た。

520デフォルトの名無しさん:2007/09/07(金) 02:04:10
lispなシェルって無いの?
> (echo "hoge")
hoge
みたいな奴
521デフォルトの名無しさん:2007/09/07(金) 02:16:25
>>520
MonaOSにSchemeなシェルがある
522デフォルトの名無しさん:2007/09/07(金) 02:16:45
523デフォルトの名無しさん:2007/09/07(金) 02:24:15
524デフォルトの名無しさん:2007/09/07(金) 05:29:54
俺なんかGoogleがLispマシン作ってただみたいな値段で売り出す夢見た。\(^O^)/
525デフォルトの名無しさん:2007/09/07(金) 05:42:02
アフリカ起源のLispは猿が二股の木を組み合わせてやってたもので、
エバル猿が仕切ってる、ってなんかで読んだのですが
GoogleがLispマシンで世界制覇したのち猿の惑星になるのかもしれないな\(^o^)/
何言ってんだ俺w寝よ…
526デフォルトの名無しさん:2007/09/07(金) 09:48:38
てか、おまいらそろいも揃って中村正三郎かよ!って顔文字使ってやがるな(w
527デフォルトの名無しさん:2007/09/07(金) 10:59:52
\(λ ^o^)/
528デフォルトの名無しさん:2007/09/07(金) 12:51:50
/(^λ^)\
529デフォルトの名無しさん:2007/09/07(金) 13:52:10
Goolips作ろうぜ
530デフォルトの名無しさん:2007/09/07(金) 16:01:44
Googlispとは…
531デフォルトの名無しさん:2007/09/07(金) 16:03:33
(google '(googlisp))
532デフォルトの名無しさん:2007/09/07(金) 20:27:51
しかし実装はPythonだ(藁)
533デフォルトの名無しさん:2007/09/08(土) 13:18:18
(OTZ =3 >>532)
534デフォルトの名無しさん:2007/09/08(土) 16:25:12
(cons "人生" "オワタ")
=> \(^o^)/
535デフォルトの名無しさん:2007/09/17(月) 15:12:01
Lisperの諸君もどってきてくださk><
536デフォルトの名無しさん:2007/09/17(月) 15:14:34
ちょっくら Haskell してくるε≡≡ヘ( ´∀`)ノ
537デフォルトの名無しさん:2007/09/17(月) 21:05:05
>>535
near the you.
538デフォルトの名無しさん:2007/09/18(火) 00:32:41
WindowsでScheme用のエディタにEmacs使いたいんだけどよくわからむ。
Gaucheの解説サイトの.emacsそのまま作ったんだけど、LispboxについてたEmacsじゃ駄目なのかな。
539デフォルトの名無しさん:2007/09/18(火) 02:54:42
どこがどうわからんのか説明できる程度までは自分で調べてくれんか
540デフォルトの名無しさん:2007/09/18(火) 04:18:48
scheme の話題はこっちで。
http://pc11.2ch.net/test/read.cgi/tech/1186922295/
541538:2007/09/18(火) 12:50:38
スレ違いごめん。
542デフォルトの名無しさん:2007/09/18(火) 22:49:22
>>538
いやいやお若いの。このスレに立ちよったのも何かの縁。
Common Lisp も学んでいっちゃぁどうだね?
543デフォルトの名無しさん:2007/09/18(火) 23:36:14
come on lisp
544デフォルトの名無しさん:2007/09/18(火) 23:49:07
寒いオヤジギャクを思いついても、書き込まないほうがいいと思うんだな
545デフォルトの名無しさん:2007/09/19(水) 00:29:32
オヤジしかいないんだから、別にいいと思うが
546デフォルトの名無しさん:2007/09/19(水) 00:38:11
>538みてーに偶に迷い込む若ぇ奴が近寄らなくなるぢゃねーか!
547デフォルトの名無しさん:2007/09/19(水) 00:46:07
>>543
その発想は無かったw
ちょっと笑ってしまった俺もオヤジの仲間入りか…
548デフォルトの名無しさん:2007/09/19(水) 00:58:39
>>543
【審議中】
    |∧∧|       (( ) )   (( ) )  ((⌒ )
 __(;゚Д゚)___  (( ) )   (( ⌒ )  (( ) )
 |⊂l     l⊃ |    ノ火.,、   ノ人., 、  ノ人.,、
  ̄ ̄|.|.  .|| ̄ ̄    γノ)::)   γノ)::)   γノ)::) 
    |.|=.=.||       ゝ人ノ   ゝ火ノ  ゝ人ノ
    |∪∪|        || ∧,,∧ || ∧,,∧ ||  ボォオ
    |    |      ∧ (´・ω・) (・ω・`) ∧∧
    |    |      ( ´・ω) U) ( つと ノ(ω・` )
   ~~~~~~~~     | U (  ´・) (・`  ). .と ノ
              u-u (    ) (   ノ u-u
                  `u-u'. `u-u'
549デフォルトの名無しさん:2007/09/19(水) 01:04:34
まあありだろ
550デフォルトの名無しさん:2007/09/19(水) 01:26:54
何でもありが Common Lisp の美点だべさ
551538:2007/09/19(水) 02:42:51
そんな若くないけど、優しいお言葉ありがとうですお
SICPとアセンブラの本を読み終わったらLISPやるつもりですお
バスコン初心者なので両方いっぺんは無理ですお
今後の予定
絶版の湯浅さんの本を押さえてあるのでそれやったら
グレアムの本2冊買うつもりですお
ここまで行けるかはかなり謎ですがおw

今は他の勉強する気ないんですがネットワーク管理任されそうですお
素人なんでそっちも勉強しなくてはならんのですお( ;^ω^)
552デフォルトの名無しさん:2007/09/19(水) 03:52:45
>>543
ナイスボケ
553デフォルトの名無しさん:2007/09/19(水) 07:08:07
lispっておっさんの言語なの?
554デフォルトの名無しさん:2007/09/19(水) 08:00:05
543 をはじめとするおっさんどもが要るだけだろう
俺はヒキコモリ高校生
555デフォルトの名無しさん:2007/09/19(水) 08:14:02
必要なのか
556デフォルトの名無しさん:2007/09/19(水) 11:12:47
以前から不思議だったんだけど2chのスレってどんな過疎スレでも「ハゲ」と「おっさん」話が持ち上がると妙にスレが伸びるんだろう?
557デフォルトの名無しさん:2007/09/19(水) 12:37:58
それはry
558デフォルトの名無しさん:2007/09/19(水) 15:21:46
>>556
2chに出入りしている腐女子は「ハゲ」×「おっさん」と
「おっさん」×「ハゲ」のどっちが良いかでご飯3杯いけるから。



因みに数字板ではこれがマジだから困る。
559デフォルトの名無しさん:2007/09/19(水) 23:43:01
イケメン禿のおっさんがLISPとは何かを語ると
腐女子がえびぞりながら泡吹いて失神するぞ。
クワトロのせりふで決めればもう涎流しっぱなしで再
560デフォルトの名無しさん:2007/09/20(木) 01:05:39
>>556
そういう言葉で煽るのは、自分はそれらのキーワードと無縁だと思ってる層で、
そういう層は大抵若い世代、言い換えれば、経験とか知識に乏しいまま全能感だけ持て余してる世代。
つまり、そういう話が持ち上がると伸びるのではなく、アホなことでスレ伸ばす層が持ち出しがちな単語が
そういうものなんでは。
561デフォルトの名無しさん:2007/09/20(木) 04:33:26
どなたかお助けください。
sbcl,clispでキーボード操作を受け付けるプログラム書いてあそんでいるのですが双方で共通にttyの設定をraw,noecho似する方法はありませんでしょうか?
現在clispでは(shell "stty raw -echo")を,sbclだと実行前に同様のコマンドを実行しています。
ただこれだとclispはreadlineがカーソルキーを食ったままですし、sbclは抜けないと元に戻せなくて困っています。
562デフォルトの名無しさん:2007/09/20(木) 07:50:19
CLISP なら SCREEN パッケージも入ってると思うけど。
あとは EXT:WITH-KEYBOARD とかでCUI できる。
SBCL と共通にしたいなら ncurses を使うのがいいんじゃないかな。
563デフォルトの名無しさん:2007/09/20(木) 11:54:18
>>562
ありがとうございます、ncursesで検索したらcl-cursesとかcl-curl(cURLじゃないんですね)とかいろいろ出てきました。

564デフォルトの名無しさん:2007/09/21(金) 11:04:13
最近cgiをLispで書くのがマイブームです><
565デフォルトの名無しさん:2007/09/21(金) 11:18:53
それたのしそうですね><
どうやるんですか><
566デフォルトの名無しさん:2007/09/21(金) 23:01:52
ViaWebでさえサーバープロセスが動いていたのに
何でCGIで書くのかと問い(ry
567デフォルトの名無しさん:2007/09/21(金) 23:02:53
普通にかけますよ
clispなら小さいからプロセス起動なcgiでもいけますし、sbclならfastcgi使うとごっつはぇぇでし。
568デフォルトの名無しさん:2007/09/21(金) 23:07:01
>>566
cgiつーのは割と身近で小さめの実用プログラムな側面があるのでそういう否定のしかたはよろしくないような気がする。
569デフォルトの名無しさん:2007/09/22(土) 00:46:01
結局のところお前らCLispで実際に使えるプログラムかいてないのか?
570デフォルトの名無しさん:2007/09/22(土) 01:07:35
エディタのスクリプトならバリバリ……
571デフォルトの名無しさん:2007/09/22(土) 07:52:21
プロトタイプ作成とかデータ整理とか表には出せないが使ってるよ。
でも上にはプロトタイプ専用の「ゲテモノ」と認識されてるんでね、テストまでしか使えない。
人月単位の人海戦術で作るとな……プロトタイプのほうが高速かつ高機能とかマジ泣ける…
仕様通りちゃんと動いたとしても、結局素人を集めて人海戦術で作らないと安心できない、それぎゃ現実の仕事。
でもテスト用のプロトタイプがあるだけでもマシなほうさ。バリバリのウォーターフォールでデスマーチ化ってとこ多いしね。
…なんか愚痴っぽくなったな、スマン。
572デフォルトの名無しさん:2007/09/22(土) 08:03:45
おれ、グーグルに入れたら「ウォーターフォール」卒業して
先端技術でバリバリ働くんだ。
573デフォルトの名無しさん:2007/09/22(土) 10:20:25
>>571
速くHackerがたくさんいる企業に就職しなおすんだ!
574デフォルトの名無しさん:2007/09/23(日) 12:49:17

(setf test-list
'(("above" . "上記の,方向,場所などを表して.")
("propose" . "提案する")
("afforded" . "余裕がある,can, could, be able toを伴って")
("dedicated" . "専用の")))
見たいなりスト作って評価したら
Coding system iso-lating-1-unix not suitable for "000c4e(:emacs-rex (swank:interactive-eval))
見たいなエラーがでるんだがCLispってUTF-8対応じゃないの?
575デフォルトの名無しさん:2007/09/23(日) 13:55:37
glibc か libiconv サポートがある環境なら UTF-8 のエンコーディングは備わってると思うよ。
SLIME (emacs) <---> SWANK (lisp) の通信設定がデフォルトの値 iso-lating-1-unix なんじゃないかな。
iso-lating-1-unix なストリームに utf-8 の文字流し込んでエラーになってるんだと思う。

;; SLIME 側の設定 (Emacs)
(setq slime-net-coding-system 'utf-8-unix)

;; SWANK 側の設定 (CLISP)
(setq swank::*coding-system* "utf-8-unix")
576デフォルトの名無しさん:2007/09/23(日) 17:06:26
>>575
できました!
ありがとうございます
577デフォルトの名無しさん:2007/09/24(月) 16:11:21
>>571
ナカーマ w
578デフォルトの名無しさん:2007/09/29(土) 17:34:40
相異なる要素からなる系列 seq の要素中 2 個を選んだ組合せをすべて表示し場合の数も表示する関数 (pair seq) で,例えば (pair abcd) が
(A B) ; A を選び,残りの B,C,D から B を選んだ組合せ
(A C) ; A を選び,残りの B,C,D から C を選んだ組合せ
(A D) ; A を選び,残りの B,C,D から D を選んだ組合せ
(B C) ; B を選び,残りの C,D から C を選んだ組合せ
(B D) ; B を選び,残りの C,D から D を選んだ組合せ
(C D) ; C を選び,残りの D から D を選んだ組合せ
6 ; 場合の数 4C2=4!/{2!×(4-2)!}=6
のように評価されるものを,必要なら関数 app を用いて定義せよ。


(defun merg (seq1 seq2)
(if (null seq1)
seq2
(cons (car seq1)
(merg (cdr seq1) seq2))))

(defun app1 (seq elem)
(merg seq (cons elem NIL)))

このプログラムを教えてください
579デフォルトの名無しさん:2007/09/30(日) 00:54:33
宿題ならちっとは考えたフリしろよw
もしくは宿題スレへ(lisperがいるかどうかは知らんが、lisp以前の問題だ)
580デフォルトの名無しさん:2007/09/30(日) 03:05:54
>>578
もちろん教えてあげますよ。
ただ、宿題を持ち込む人は多いんだけど情報不足なんだよね。

1. 締切はいつまで?どんなレベルの解答がお望み?
2. Lisp の授業ははじまってどれくらい?一ヶ月?三ヶ月?
3. 教科書はなにで、どれくらいまで読んだ?
4. ズバリ答えがほしいの?教育的ヒントがほしい?

別にズバリ答えがほしいならそれで即解答しますんで、正直に答えてね。
581デフォルトの名無しさん:2007/09/30(日) 09:53:44
>>580
正直ズバリ答えてほしいのが本音ですが・・・

ヒントだけでも良いです。
締め切りは明日で、Lispは半年程やってます。教科書はありません。
582デフォルトの名無しさん:2007/09/30(日) 12:55:52
教科書がないって、困ったな。HyperSpec とか読んでる?
指標がないと、どーかげばいいのかこっちも悩むじゃねーか。
たとえば、下のコードで何かわからない点はある?

(defun pair (seq)
(loop with counter = 0
for lst on seq
for e1 = (car lst)
do (dolist (e2 (cdr lst))
(format t "(~A ~A)~%" e1 e2)
(incf counter))
finally (format t "~D~%" counter)))
583デフォルトの名無しさん:2007/09/30(日) 13:19:14
たぶん再帰で書いてほしいんだと思った
584デフォルトの名無しさん:2007/09/30(日) 13:34:09
フーン。じゃあこうか?

(defun pair2 (seq)
(labels ((rec (x xs n)
(if (null x)
n
(let ((n (rec2 x (car xs) (cdr xs) n)))
(rec (car xs) (cdr xs) n))))
(rec2 (e x xs n)
(if (null x)
n
(progn
(format t "(~A ~A)~%" e x)
(rec2 e (car xs) (cdr xs) (1+ n))))))
(format t "~D~%" (rec (car seq) (cdr seq) 0))))

ブツブツ。ほんと世の中 Scheme に毒され過ぎだぜ…。過度の一般化じゃないか?
そりゃ再帰のほうが一般的なのはわかるが、特殊なケースのほうが記述が短い場合に反復を使うのを恐れるべきじゃない。
なんだったら LOOP や DOLIST が再帰で実装されていると思えばいいんじゃないか?
585デフォルトの名無しさん:2007/09/30(日) 13:35:14
すまん、インデントがメチャクチャになっちゃった orz
586デフォルトの名無しさん:2007/09/30(日) 13:50:45
まあ普通はループで書くと思うけどね。宿題だから再帰するのかなと。
587デフォルトの名無しさん:2007/09/30(日) 13:53:05
本題から外れるが、
>>584
>>反復を使うのを恐れるべきじゃない。
禿同。再帰を使うだけで問題の本質は露わになる、わけじゃない。
時と場合を選べば、LOOP最強。
588デフォルトの名無しさん:2007/09/30(日) 14:22:06
>>584
> なんだったら LOOP や DOLIST が再帰で実装されていると思えばいいんじゃないか?
よくない。再帰で実装されてると想定して、たとえば
(let (r) (dolist (x '(a b c) (mapcar #'funcall r)) (push #'(lambda () x) r)))
=> (C B A)
となることを期待すると実装依存になってしまう。
589デフォルトの名無しさん:2007/09/30(日) 14:50:13
loop って末尾再帰とは限らないんだっけ?
590デフォルトの名無しさん:2007/09/30(日) 15:02:38
>>582
>>584
わからないとこ多いですね↓

loopとかforとか習ってません

関数の定義、分岐(if とかcond)
リスト(list car) データのリンク(cons)
とかですね。習ったのは。すいません
もうすこし自分で考えてみようと思います
591デフォルトの名無しさん:2007/09/30(日) 15:27:23
>>588
わざわざできない例をもってくるなよ…。
その例だと束縛をキャプチャしてるけど、その束縛を DOLIST が書きかえるんだからおかしいのは当然だろ。
束縛のキャプチャは CL じゃあ常識なんだから、CL の人はそんな事しないし気をつけるもんなんだよ。
Scheme かぶれはなんでもかんでも Scheme で考えるからハマるんだろう。
この例に限定しているつもりだったが、もちろん一般的には CL では再帰で実装されていると考えてはいけない。
俺の書き方に問題があったのは認める。普通 CL な人は IF と GOTO による実装をイメージする(macroexpand すれば一目瞭然)。

>>589
というか CL の DO* や LOOP は基本的に GOTO と IF で実装されてるから、ほぼ確実に再帰じゃない。
俺は再帰で実装している処理系を見たことがない。

>>590
やっぱり Scheme 風味な授業なんだな。じゃあ 584 のほうを提出したまえ。
592デフォルトの名無しさん:2007/09/30(日) 15:39:20
CL から見れば 588 の例なんかは
for(i=0;i<n;i++){list.push_back(&i);}
ってやって、あとで i のポインタの先の値をみて文句を言うのと同じようなダメさを感じるわけ。
再帰でしか物を考えられない Schemer は、CL を使うときはもっと考えを切りかえてからきてくれ。
Scheme は良いものだが、だからといって他のすべてのその思想を押しつけることなどできないのだ。
身近だから CL を煽りにくるんだろうけどさ……所詮どっちもマイナーな世界だ。お互いを尊重して仲良くいこうや。
593デフォルトの名無しさん:2007/09/30(日) 16:08:10
Schemer だって再帰を多用するわけじゃないでしょ
Shiro さんも言っていたけど fold や map、for-each や srfi-42 などのユーティリティを多用するのがスタイル
loop 的なものはあんまり使わないと思うけどね
594デフォルトの名無しさん:2007/09/30(日) 16:15:30
>>591
(format t
とか??なんですが
595デフォルトの名無しさん:2007/09/30(日) 16:55:32
>>594
おれは>>584じゃないけど、おまい授業出てないだろ。
format t は printf STDOUT みたいなもんだよ。~% はタダの改行。
596デフォルトの名無しさん:2007/09/30(日) 17:00:33
授業に出てるなら、こんなとこで質問する必要はないのでは?
597デフォルトの名無しさん:2007/09/30(日) 17:19:39
宿題を張った奴にここまで優しいのはこのスレくらいじゃね?
598デフォルトの名無しさん:2007/09/30(日) 17:59:27
宿題にはもっと妙な答えを教えてあげようよ。
今回のだったら tagbody と go で書くとか。
599デフォルトの名無しさん:2007/09/30(日) 19:15:23
Scheme の srfi-42 を使って書いてほしいんです><
600デフォルトの名無しさん:2007/09/30(日) 19:16:58
>>599
そりはすれち
601デフォルトの名無しさん:2007/09/30(日) 21:33:06
>>599 Gauche でやってみたよ
(use srfi-42)
(define (pair seq)
(let1 counter 0
(do-ec (: xs seq) (: ys (cdr (member xs seq)))
(begin
(format #t "(~s ~s)~%" xs ys)
(inc! counter)))
(format #t "~d~%" counter)))

gosh> (pair '(a b c d))
(a b)
(a c)
(a d)
(b c)
(b d)
(c d)
6

>>600 スレちがいゴメン
602デフォルトの名無しさん:2007/09/30(日) 22:43:18
>>601
うほ! ありがとございます!
srfi-42 ムズカシイんです><
Gauche のマニュアルだけでは良くわかりませんでした><
サンプルがいっぱいのってるチュートリアルみたいなものがどっかにあれば、、、
スレ違いスミマセン
603デフォルトの名無しさん:2007/10/01(月) 00:27:06
>>594
出力につかっていいの関数は何?使ってる処理系は何?
最初に聞いた質問にはちゃんと意味があって、こーゆう状況を防ぐために教科書や処理系を聞いてたんだよね。
大抵の環境なら (print (list a b)) と (print counter) にすれば動くと思うけれど。

>>598
そんなコードを見せても意味があるとは思えない。
俺はこの質問者もひょっとしたらモノになるんじゃないかと期待をしているのだよ。
604デフォルトの名無しさん:2007/10/02(火) 00:02:57
>>584
labelsやletやformatを使わないでかけますか?printコマンドは知ってます
605デフォルトの名無しさん:2007/10/02(火) 01:08:09
任意の型のデータxを第一引数、cons型のデータのリストdを第2引数として取り、dの要素のうちで、そのfirst部分がxに一致する(ただし比較はequal()で行うものとする)ものがあればそのような要素の最初のものを返し、さも無ければnilをかえす関数assoc_equ()を定義せよ

この問題できないんですけどどなたかできませんか?よろしくお願いします><
606デフォルトの名無しさん:2007/10/02(火) 01:16:13
>>605
(defun assoc_equ (x d)
  (assoc x d :test #'equal))
607デフォルトの名無しさん:2007/10/02(火) 02:14:08
できました!ありがとうございます!!!
書き方がまだ習ってない技法なので、もっと簡単に書き換えるとどんなのになるのでしょうか?
よろしかったら教えていただけませんか?

ループなどでもできると聞いたので。。。
608デフォルトの名無しさん:2007/10/02(火) 02:20:35
その昔、テーラー展開の式が書いてあってこれを証明せよって問題があった。
で、その回答に「テーラー展開より」って書いたやつがいたのを思い出した。
609デフォルトの名無しさん:2007/10/02(火) 02:27:10
コーモンリップス
610デフォルトの名無しさん:2007/10/02(火) 02:38:30
>>609
夜中にそんなこと言ってるからおまえは駄目なんだよ
611デフォルトの名無しさん:2007/10/02(火) 03:04:53
(´・ω・`)こ、こーもん・・・
612デフォルトの名無しさん:2007/10/02(火) 22:22:06
>>607
半年で let がでてこないのはすごいなぁ。
書いてもいいけど、もう締切は過ぎたんじゃないの?

ループによる解答は 582 で出てるよ。
613デフォルトの名無しさん:2007/10/03(水) 05:12:01
ある情報を処理するアプリケーションをC言語で書きました。
で、そのアプリケーションは処理結果としてdouble型の数値を3つ結果として出力します。
ここからが質問なのですが、
ウェブサーバを立ち上げて、クライアントが情報を入力すると、このアプリケーションが処理して
処理結果の数値をデーターベースに格納出来るようにしたいんです。
この用途にKahuaは使えるのでしょうか?
もしくはコレが出来るライブラリみたいな物は有りますでしょうか?
614デフォルトの名無しさん:2007/10/03(水) 12:28:35
>>613
そのアプリケーションをあなたが書いた物と仮定する。
やりたいことは可能だが、意味のある事じゃない。
むしろ元アプリケーションをfastcgiライブラリを使うように少し修正してmod_fastcgiを使うか
shellでcgiを書いて受け渡す方が楽だろう。
615デフォルトの名無しさん:2007/10/03(水) 22:17:49
>>614
意味がないとまで断定するこたぁないと思うが。
AllegroServe で R と連携する例。
http://cl-www.msi.co.jp/solutions/knowledge/lisp-world/r-demo/r_fuelframe
616デフォルトの名無しさん:2007/10/03(水) 23:14:32
>>615
元コードがCで書かれていて、さらにKahua上から制御できるかいと聴かれているのだから意味が薄いって事なんだよ。
しかもあなたの提示はAllegroServeじゃないか。
そりゃ元コードがCommonLispだったら楽しそうだし、もしも元コードがSchemeで書かれていればKahuaでの実装に美しさを感じるだろうことは否定しないんだけど。

ちなみに僕のおすすめはFastCGIでLisp実装っていうもっと尖っているけどApacheあたりと仲良くモードです。
617デフォルトの名無しさん:2007/10/03(水) 23:38:40
ヒント: ここは Common Lisp 入門スレ
Kahua でも AllegroServe でも別にいいんじゃね?
標準入出力/パイプ/ソケットで制御するなら別にどっちでもかわらんだろう、と思って R をごにょごにょする例を紹介したのだが。
618デフォルトの名無しさん:2007/10/03(水) 23:51:05
いいじゃん、「意味」なくても。
>>613 の要件ってLisperが気にするほど効率要求されてないと思う。

だとしたら、せいぜい AllegroServe+FFIとか、gauche からCを呼びだす方法とか
(おれはkahua知らないけど)、軽く面白そうな選択肢を教えてあげりゃいいんじゃね?
619デフォルトの名無しさん:2007/10/03(水) 23:52:08
>>617
いや、CommonLispスレに元CコードをKahuaとまぜこぜ可能かって聴かれたからこそあの回答なんですけど orz
そりゃ僕だって全部CommonLispでってのはスレ的に正しいとは思うけどあんまりなんじゃないかい?

なんとなく質問した奴の状況が感じられる状況と似た境遇にあった俺が2ch的にあまちゃんなんだろうけどさ。
620デフォルトの名無しさん:2007/10/04(木) 00:12:13
「元CコードをKahuaをまぜこぜ可能か」って質問だったの?
「アプリケーションをC言語で書きました。」だからスタンドアロンな実行バイナリをイメージしてたよ。
んで >>615 を紹介したわけ。別に Kahua でもいいかなーと。run-program で起動して結果をうけとるでもいいんじゃねーと。
あくまで外部コマンド + Lispサーバで、「全部CommonLisp」とか書いたつもりはないけど…。
621デフォルトの名無しさん:2007/10/04(木) 00:24:45
>>620
あー、今夜の僕は読解力ないかも(週も半ばなのに大分呑んだし)
僕が解釈したのは元の計算コードをCで記述済みでウェブサーバにKahuaを使った場合にそのCコードの産物とどうやってやりとりしたらいいの?
って事だったんで、そこまで境界がきれいにわかれてるならLispに拘らない方がいいのじゃないのっていうスレ的には正反対の結論がでちゃったんだ。

;;;うーむ、今受験の引っかけ問題や詐欺師がきたら死ねるなぁ。
622デフォルトの名無しさん:2007/10/07(日) 18:49:58
(setq abcd (list 'A 'B 'C 'D))


(defun merg (seq1 seq2)
(if (null seq1)
seq2
(cons (car seq1)
(merg (cdr seq1) seq2))))

(defun app (seq elem)
(merg seq (cons elem NIL)))

(defun comb (seq)
(defun ith (que i)
(if (= i 1)
(car que)
(ith (cdr que) (- i 1))))
(defun lp (tmp i n)
(print (app (list (car tmp)) (ith tmp i)))
(cond ((null (ith tmp 3)) n)
((null (ith tmp (+ i 1)))
(lp (cdr tmp) 2 (+ n 1)))
(T (lp tmp (+ i 1) (+ n 1)))))
(lp seq 2 1))

の関数combを変更して
相異なる要素からなる系列 seq の要素中 num 個(num: 系列長以下の非負整数)を選んだ組合せをすべて表示し場合の数も表示する
関数 (comb seq num) を作る問題を教えてください


623デフォルトの名無しさん:2007/10/07(日) 18:51:10
たとえば(comb abcd 3)の評価は
(A B C)
(A B D)
(A C D)
(B C D)
4

のようになります。(comb abcd 0) は
1

と評価されます

624デフォルトの名無しさん:2007/10/07(日) 19:11:17
>>622
宿題かい?
宿題だと仮定して、ここで答を聴いてしまうと、君は次の宿題もここか他で答を探す羽目になるんじゃないのかい?
だとすれば、君がなすべき事はその宿題のどこがわからないかを表明して助けを乞う事であって解を求める事じゃないのではないの?

宿題じゃないならごめんな。
625デフォルトの名無しさん:2007/10/07(日) 19:18:18
>>624
宿題です。
(A B C D)
ってあったらまずAをチョイスしてnum個のリストになるまでリストに要素を追加していくやり方を考えているんですがうまくかけないんです
626デフォルトの名無しさん:2007/10/07(日) 22:03:55
>>622
あのさー >>578 で全く同じ宿題がでてるんだけど。締切は 9/31 までだったんじゃねーの?
>>578 がウソつき野郎だったのかループを狙ってるのか……。たぶん君も前の彼も大学生なんだよな?
宿題の丸投げくらいはちゃんとできるようになろうよ?エスパー募集ばっかしてたら社会でやっていけないよ。
どんな関数使っていいのかとか、環境とか、締切とか、宿題丸投げするなら最低でもそのへんは書こうよ。

前の彼も後で「format知りません」「let も使わないでください」とかいいだすし。
627デフォルトの名無しさん:2007/10/07(日) 22:10:20
いや、問題はちょっとややこしくなってるぞ。
たぶん >>578 の続編だろう
628デフォルトの名無しさん:2007/10/07(日) 23:24:28
だからー、宿題に丸まる答えてあげるのやめなよ。
せいぜいヒントを出すとか、「こういう風に考えてやってみたけどうまく行きません、
どこがまちがってるのでしょうか?」と言う質問にだけ答えるとか。

丸まる答えたらますます自分で考える気を無くすよ、多分。
629622:2007/10/07(日) 23:30:44

再帰的に(A B C D)のリストからまず先頭Aで

numが0になるまで

Aをとって(A)というリストをつくる。numを1つ減らす
Bをとって(A B)というリストをつくる。
・・・

みたいに考えたんですが(A) (A B) というリストをうまく保持しておけません。
630デフォルトの名無しさん:2007/10/07(日) 23:35:30
>>628
こんな所に質問しにくる馬鹿が今後どんな人生を歩もうと、そんなことどうでもいい
631デフォルトの名無しさん:2007/10/07(日) 23:47:49
出題者のレベルもアレな感じがするのは気のせいか
632デフォルトの名無しさん:2007/10/07(日) 23:52:47
>>631
そうですね
633デフォルトの名無しさん:2007/10/08(月) 00:02:15
>>628
最初にそう聞いてくる奴ならそう答えるさ。だがちゃんと丸投げですと宣言したならズバリ答えを解答しちゃうよ。
もし本当にやる気があるなら、ズバリの答えでもちゃんと見て考えるさ。見とり稽古みたいにね。
全体図と筋道を見せてからゆっくり詳細を解析したいって人もいるかもしれない。
やる気がない人をむりやりやらせるなんてのは非生産的。
634622:2007/10/08(月) 00:03:38
>>633
やる気はあります!
635デフォルトの名無しさん:2007/10/08(月) 00:43:23
そうか。んじゃ使ってる Common Lisp 処理系で次を見てみよう。

(loop for l on lst ;; '(A B C D) => '(B C D) => '(C D) => '(D) => NIL
for e = (car l) ;; A => B
for l2 = (cdr l) ;; '(B C D) => '(C D)
do (print l)
(print e)
(print l2))
636デフォルトの名無しさん:2007/10/08(月) 06:21:28
やる気があるのなら教官に聞けよ
637デフォルトの名無しさん:2007/10/08(月) 06:41:15
宿題がでると妙に活気づくなあ。よいよい
638デフォルトの名無しさん:2007/10/08(月) 08:29:35
>>622
Scheme 臭いコードだなあ。
internal defun なんて意味不明なこともやってるし。

どこの大学のなんて香具師が担当してる講義なのか晒しちゃえよ。
639デフォルトの名無しさん:2007/10/09(火) 09:02:43
scheme臭がすると異常反応するスレw
640デフォルトの名無しさん:2007/10/09(火) 09:15:13
過剰反応っていう言葉はあるけど、異常反応ってのはあんまり聞かないな。
641デフォルトの名無しさん:2007/10/09(火) 12:40:54
Scheme臭に抵抗無かったらSchemeを使ってるよ
642デフォルトの名無しさん:2007/10/09(火) 13:13:23
俺はScheme臭に抵抗ない、むしろSchemeっぽい書き方の方が好きだけど、
Common Lispの便利な機能でSchemeにないものが多いからCommon Lisp使ってる
643デフォルトの名無しさん:2007/10/09(火) 13:16:26
たとえばなに
644デフォルトの名無しさん:2007/10/09(火) 13:25:48
スペシャル変数とか
645デフォルトの名無しさん:2007/10/09(火) 20:24:02
エレガントかつ強力なloop構文とか
646デフォルトの名無しさん:2007/10/09(火) 21:04:26
format
647デフォルトの名無しさん:2007/10/09(火) 23:45:18
reader macro
648デフォルトの名無しさん:2007/10/10(水) 01:03:54
compile, eval-when, disassemble, trace, optimize ... とか?
でも Scheme も Gauche なら便利だから使うな。頭は別の言語として切り替わるのであんまり困る事はない。
むしろ片方を撰択して、もう片方を見下す、みたいな行為をやめて両方使えばいいじゃん。
649デフォルトの名無しさん:2007/10/10(水) 01:17:20
見下されたと錯覚した人が攻撃に転ずる気がする。多くの戦争と同じ原理だ。
650デフォルトの名無しさん:2007/10/10(水) 01:30:52
CL の人としては funcall はクソとか、*常に* 末尾再帰を最適化しないとクソ、みたいな一面的な見方に反論したくなる気持ちはわからんでもない。
が、実際にいちいち反論する人は 2ch 以外ではあんまりみかけないなぁ。
651デフォルトの名無しさん:2007/10/10(水) 01:32:20
そういや 622 はどうなったんだ?締切とか大丈夫なのか?
652デフォルトの名無しさん:2007/10/10(水) 07:38:56
ΣってどうやってCommon Lispで定義出来ますか?
リスト(2 4 6 8 )を全部足す奴。
なるべく再帰で。
653デフォルトの名無しさん:2007/10/10(水) 07:58:10
>>652
(loop for x in '(2 4 6 8) sum x)
654デフォルトの名無しさん:2007/10/10(水) 08:38:38
そういうときは apply 使うのが好きかな

(apply #'+ '(2 4 6 8))
655デフォルトの名無しさん:2007/10/10(水) 09:53:05
>>649
そんでもって、「見下してないよ、それはあなたの被害妄想だよ」と言い張れる言い方で見下すのが
ネットの基本戦術なんだよな。
656デフォルトの名無しさん:2007/10/10(水) 12:09:12
ACLのアカデミック版って($99の奴)って
日本の学生って適応されないの?
ざっとみたところ、米国のみって記述が見つからなかったけれど。
657656:2007/10/10(水) 18:03:34
お金払ったのに、いつまでたってもソフトウェアダウンロードの案内がこない
(ストアのアカウント作成の案内も)と思っていたら、
http://help.yahoo.co.jp/guide/jp/mail/info/071010/
マジカよ。アリエネェだろ。
フリーメールで登録するんじゃなかった。
日本のFranzに問い合わせても大丈夫かな。
658デフォルトの名無しさん:2007/10/10(水) 19:52:34
(defun sigma (x &optional (y 0))
(if (null x) y
(sigma (cdr x) (+ (car x) y))))

再起にしたらこんな幹事?
659デフォルトの名無しさん:2007/10/10(水) 21:01:45
末尾再帰って指示ないなら出題者はこっちを意図してるかも

(defun Σ (list) (if list (+ (car list) (Σ (cdr list))) 0))
660デフォルトの名無しさん:2007/10/10(水) 21:04:16
>>654でまずい理由でもあるの?
>>658-659はΣでもなんでもなく、+の再定義でしかない
661デフォルトの名無しさん:2007/10/10(水) 21:33:34
>>660
拡張しにくい。範囲の制限や関数 f を適用した結果を集めたいときに、関数ならパラメータを追加することで対応できる。
というかそっちの方向に進むと思われるので、(apply #'+ ...) じゃなくて普通は自前で実装するところからはじめるんだろう。
662デフォルトの名無しさん:2007/10/10(水) 22:19:46
sbclのコンパイルについて教えてください・・・。
動作環境はWin XP, sbcl Ver.1.0.9です。

ttp://fridge-shell.blogspot.com/2007/02/sbcl.html
このHPと同じように操作すると、outファイルができるので、
これをout.exeにリネームしてコマンドプロンプトで実行すると
応答がかえってこずに固まってしまいます。

このスレで、sbclでコンパイルした実行ファイルはサイズが大きい(10MB?)
というレスをみましたが、outファイルは2kBしかありません。

ネイティブコンパイルする手順がWin版とLinux版では異なるのでしょうか・・・
663デフォルトの名無しさん:2007/10/10(水) 22:34:35
>>662
SBCL Windows 版はまだ誰もが使えるような状況ではありません。
試験的なリリースですので問題を自力で解決できる人向けのものです。
Windows 版自体がまだ実験的なものですので、EXE の生成機能は非サポートです。

「ネイティブコンパイルする」 == 「.exe を生成する」というのは Lisp の世界においては成立しません。
.exe を生成するのは「スタンドアロンなバイナリ/実行形式を生成する」と呼ばれる機能です。
ネイティブコードの生成自体はもっと簡単です。プロンプトで (compile nil (lambda (x y) (+ x y))) と打つだけで
コンパイラはネイティブコードを生成できます。
664662:2007/10/10(水) 22:46:09
>>663
ご回答ありがとうございます。

Win版はexeの生成は非サポートだったのですね・・・。
こういう時だけlinuxが羨ましくなります。 orz

いろいろと勉強になりました。
ありがとうございました。
665デフォルトの名無しさん:2007/10/10(水) 23:00:41
ついでに言っておくと、Lisp の世界ではスタンドアロンバイナリ生成を使う機会はほとんどない。
なぜなら、Lisp の世界ではアプケーションはユーザーが触って変更できる「システム」である事が多いから。
Emacs や Maxima や Aximo などはユーザーがプログラムを投入するたびに .exe を生成したりしない。
ベースの機能にユーザーによる拡張をインクリメンタルに追加しながら増えていくんだ。
この辺が感覚的に合わないなら Scheme のほうがいいかもしれない。

# LispWorks や AllegroCL、CormanCL のような商用の話や、GCL, ECL, といった GCC をバックエンドに使う連中とかはまた別
666デフォルトの名無しさん:2007/10/11(木) 01:40:48
>>665
「Schemeのほうがいい」理由がよくわからん。
単にスタンドアロンバイナリをスマート作れない処理系が多いというだけでは?
667デフォルトの名無しさん:2007/10/11(木) 02:19:03
サイズはでかいけどwinのsbclでsave-lisp-and-dieは
結構まともに動いているように思う。

一般的でないのはlispで配布するという機会が見ている分にすくないだけで
exe作るのって他所の言語と比べて難しいとは全く思わないのだけれど。

lispで作られて配布されている有名なソフトってあります?

668デフォルトの名無しさん:2007/10/11(木) 08:05:42
>>662
sb-executable って、もうほとんどサポートされてないよ。
save-lisp-and-die の :executable に置換済み。

>>667 が言ってるように、save-lisp-and-die は Win32 でもちゃんと動く。

C:\>sbcl
This is SBCL 1.0.9, an implementation of ANSI Common Lisp.
<snip>
This is experimental prerelease support for the Windows platform: use
at your own risk. "Your Kitten of Death awaits!"
* (defun main () (print "Hello, SBCL!") (quit))

MAIN
* (save-lisp-and-die "hello.exe" :toplevel #'main :executable t)
[undoing binding stack and other enclosing state... done]
[saving current Lisp image into C:\\hello.exe:
writing 1960 bytes from the read-only space at 0x02000000
writing 1640 bytes from the static space at 0x02100000
writing 22888448 bytes from the dynamic space at 0x09000000
done]

C:\>hello

This is experimental prerelease support for the Windows platform: use
at your own risk. "Your Kitten of Death awaits!"

"Hello, SBCL!"
669デフォルトの名無しさん:2007/10/11(木) 08:12:26
便乗質問させてもらうけど

1. ネイティブコンパイラがある(コンパイルした結果が速い)
2. 実行可能形式(EXEやDLL)が作れる
3. マルチスレッドアプリが書ける。
4. (基本的な)CLOS(オブジェクト指向)機能のサポート
5. ソケットインターフェースのサポート
6. 作成したアブリを配布する際のライセンス料が安い、もしくは無料

これらの条件を全て満たすフリー
もしくは比較的安価な商用Lisp処理系と言ったら
やっぱりCorman Lispが一番かな?
ブラットフォームはWindowsが前提です。
670デフォルトの名無しさん:2007/10/11(木) 09:41:35
Windows ってだけでフリーの実装はほぼ全滅だからね
Lisp で遊ぶなら UNIX
671デフォルトの名無しさん:2007/10/11(木) 12:25:35
>>669
比較的安価ってだけでLispWorksがそれに該当するんじゃない?
(対象がACLだから安く感じるだけかもしれんが)
672デフォルトの名無しさん:2007/10/11(木) 13:23:22
商用だとTorrentはまずいかな。
673デフォルトの名無しさん:2007/10/11(木) 13:46:22
Windowsにポーティング中のSBCLはGCのバグまだ残ってるみたいね。
やる気ないにしても、POSIX以外だとそんなに移植が困難な実装なのかな?
それともWindowsで動かせちゃダメみたいな変な勢力が邪魔してるとか。
674デフォルトの名無しさん:2007/10/11(木) 18:28:42
>>666
「スマート」の意味がわからん。スタンドアロンバイナリにスマートとそうじゃないものがあるの?
CLISP, SBCL, GCL, ECL, ACL, LispWorks, CormanLisp... スタンドアロンバイナリを生成できないのって ABCL くらいじゃないか。
>>668
SBCL for Win32 系で「ちゃんと動く」とかは言わないほうがいいと思うんだよなー。
use at your own risk なんで初心者に進めると混乱の元じゃないか。
>>669
ECL も忘れないでやってください。
>>673
単に開発者がいないだけ。
675デフォルトの名無しさん:2007/10/12(金) 01:45:55
俺は OpenMCL をいつか弄りたいと思ってる。スレッド廻りきちんとしてそうだし、フットプリント小さいし。
676デフォルトの名無しさん:2007/10/12(金) 08:42:10
OS7でMCL使ってたけどあの環境良かったなあ。
677デフォルトの名無しさん:2007/10/12(金) 20:55:25
2ch発のLisp処理系作ろうぜ
678デフォルトの名無しさん:2007/10/12(金) 21:17:50
>>677
よし、yacc と PHPで作ろう。
679デフォルトの名無しさん:2007/10/12(金) 21:34:48
どうせならPHPのみで

↓まかせた
680デフォルトの名無しさん:2007/10/12(金) 21:56:21
>>676 どんな感じだったの?紹介してくれよ。
681デフォルトの名無しさん:2007/10/12(金) 21:59:26
LISP作るのにyaccはどう考えても出番が無いだろ
682デフォルトの名無しさん:2007/10/12(金) 22:07:40
>>681
リーダーマクロとかあるからあった方がよくね?>>yacc
勿論Common Lispをフル実装するんだよ。
683デフォルトの名無しさん:2007/10/12(金) 22:11:18
yaccで作ったんじゃ動的なリーダマクロにならないじゃん
684デフォルトの名無しさん:2007/10/12(金) 22:19:27
本スレでやってくれ。
685デフォルトの名無しさん:2007/10/12(金) 23:31:06
どうせ作るならCommonLISP上位互換にしてください。
このスレではCommonLISPの仕様を満たしてないと
LISPとは認めませんので。
686デフォルトの名無しさん:2007/10/12(金) 23:33:15
荒しうぜぇ……
687デフォルトの名無しさん:2007/10/12(金) 23:55:52
自分の気に入らないもの=荒し

やれやれ・・
688デフォルトの名無しさん:2007/10/13(土) 00:29:21
確かに、やれやれとしか言い様のない妄想等式だね。
689デフォルトの名無しさん:2007/10/13(土) 00:42:28
言語の実装が入門スレにふさわしいわけかね。まぁ本スレへの誘導も無視してるし、荒しだと思っとくよ。
690デフォルトの名無しさん:2007/10/13(土) 01:36:29
>>677がここで話振ったんだから奴に任せようぜ
691デフォルトの名無しさん:2007/10/13(土) 03:21:45
処理系作るってのも立派な入門内容だと思うけどなあ。特にLispの場合は。
動作原理知るために1度は通るでしょ。
>>677の枕詞にCommonLispでもあれば納得したわけ?
つーかこの程度で荒らし認定かよ。
どうせ特定の一人だろうけど、きもすぎるわ。
692デフォルトの名無しさん:2007/10/13(土) 07:39:45
まぁやるのはいいと思うよ。俺は興味ないけどさ。
具体的な作業をはじめるか、本スレに移動すりゃ文句いわれないんじゃない?
693デフォルトの名無しさん:2007/10/13(土) 12:40:25
荒らしというほど荒らされてるようにも見えないしなあ。
ぐだぐだ言ってんのは約一名だろうね。
694デフォルトの名無しさん:2007/10/13(土) 13:56:05
>685が煽りっぽい言葉を書いてるのは確かだろ。
「Common Lisp上位互換」なんて洒落にもならん事を。

>686が「荒らし」と言ってるのはその事だけだろ。
695デフォルトの名無しさん:2007/10/13(土) 14:18:24
>>686が誰を指して言ったかなんて本人にしかわかんと思うぞ
本人乙
696694:2007/10/13(土) 17:26:36
>695
俺は >686本人じゃないけど勝手に自分達が非難されてると解釈して
感情的に反応するより遥かにマシだろ?
697デフォルトの名無しさん:2007/10/13(土) 17:41:36
>>695
> わかんと思う
どういう意味ですか?
698デフォルトの名無しさん:2007/10/13(土) 19:37:16
和姦と思う
699デフォルトの名無しさん:2007/10/14(日) 20:50:25
どうも、誰か一人が自分を攻撃しているというふうに捉えているようだね・・・
どうせならなにか生産的な話題を振って荒しじゃない事を行動で示せばいいのに。
結局 >>686 が正しかったのかね。
700デフォルトの名無しさん:2007/10/14(日) 22:06:45
2ch発のCommonLisp処理系作ろうぜ
701デフォルトの名無しさん:2007/10/14(日) 22:59:06
成功したプロジェクトが実は 2ch 発だったってことはよくあるけど、
最初から 2ch 発でって言ってて成功したためしはほとんどないんだよね。
702デフォルトの名無しさん:2007/10/14(日) 23:22:31
そもそも2ch発なんて名ばかりで実質匿名の個人作業公開オナニーだろ
703デフォルトの名無しさん:2007/10/14(日) 23:43:58
「2ch発」という言葉にどんな定義を見出しているのかがわからんレスだな。

急に中二病による発作に見舞われて、いつもよりちょっと大きめの打鍵音を立てて
ケツに「公開オナニー」って書き加えた辺りの心の動きだけは、容易に理解できるけど。
704デフォルトの名無しさん:2007/10/15(月) 05:26:32
出たよ定義厨
705デフォルトの名無しさん:2007/10/15(月) 11:45:40
とりあえず厨をつけてみたのはわかった。
もうちょっとうまく展開できてたら、苦し紛れがバレなくて済んだかも。
706デフォルトの名無しさん:2007/10/15(月) 19:48:07
オナニー禁止なんてお前らプロテスタントかっつーのwwww
707デフォルトの名無しさん:2007/10/15(月) 20:25:09
誰かが俺を攻撃してる!→ファッビョーン→荒れまくり
というのは、以前に本スレでも似たような流れがあったよねぇ……。

ちょっと前に宿題聞いてた人たちは、結局自力で解けたの?
708デフォルトの名無しさん:2007/10/15(月) 23:06:48
(a (b) c (d (e)) f)

こういうリストがあったとしてeを削除したいんですがどうやったら取り出すことができますか?
関数定義したいんですが。
first secondなどで取り出してるんですがうまくいきません。
アドバイスありましたらよろしくお願いします
709デフォルトの名無しさん:2007/10/15(月) 23:07:50
>>707
まだ解けないです!
710デフォルトの名無しさん:2007/10/15(月) 23:29:01
>>708
ほしい結果はこれ?
(a (b) c (d ()) f)
711デフォルトの名無しさん:2007/10/15(月) 23:48:27
>>708
listっていってもconsセルの集まりなんだから絵を描いて整理してみれば。
712デフォルトの名無しさん:2007/10/16(火) 09:33:47
まずは簡略化した問題の解を得て、それを元に改良していけばいい。
708ならまずはネストしていないリスト(a b c d e f)からeを除く関数を実装する
あたりから始める。
(目的は近似解を得ることなので、deleteとか使わず自分でやる)
713デフォルトの名無しさん:2007/10/16(火) 13:20:35
>>710
>>711
>>712
レスd
再帰で何とかできました。
714デフォルトの名無しさん:2007/10/16(火) 14:27:07
どうやって出来たか教えてー
715デフォルトの名無しさん:2007/10/16(火) 23:13:07
すいません。質問させてください。
中置演算子で書いた簡単な計算式を解析して実行するプログラムを書こうと思うのですが、
'( 1 + 1 ) ってリストを作って、演算子を取り出しても計算できません。
リストから関数は取り出せないのでしょうか。

(begin
 (define calculate
  (lambda (l)
   ( ((car (cdr l)) (car l) (car (cdr (cdr l)))))))
 (calculate '(1 + 1)))
716デフォルトの名無しさん:2007/10/16(火) 23:19:42
マクロにするか演算子の値で分岐しないといけないような。
シンボルを識別子とみなして値を取り出すって Scheme でできたっけ?
717デフォルトの名無しさん:2007/10/16(火) 23:25:04
evalが使えるはず
718デフォルトの名無しさん:2007/10/16(火) 23:29:54
eval使うまでもなく
(define op-alist `((+ ,+)(- ,-) ...))
みたいなの作っとけば
((cadr (assq (cadr infix) op-alist)) (car infix) (caddr infix))
で呼べるでしょ
719デフォルトの名無しさん:2007/10/16(火) 23:35:00
CLの人: (funcall イイ。(( は構文と見た目が区別できんからイクナイ。

CL-USER> (defun calculate (lst)
(funcall (second lst) (first lst) (third lst)))
CALCULATE
CL-USER> (calculate '(1 + 1))
2

Schemeの人: (funcall ウザイ。 (( ってかいて括弧の数を数えたい。
720デフォルトの名無しさん:2007/10/16(火) 23:36:45
やはりschemerの方が知能が上みたいですね。
CommonLispは小手先だけ器用になりそなイメージです。
721デフォルトの名無しさん:2007/10/16(火) 23:48:11
i < おまえより知能の高い酸のブロッブを知っているぞ
722デフォルトの名無しさん:2007/10/16(火) 23:51:27
>>719
毎回比較したがるクセは直したほうがいいね
723デフォルトの名無しさん:2007/10/17(水) 00:10:10
関数定義が
(define hogehgoe
(lambda (x) ...)
ってのがムカツク。引数の数がちょっと見ではわかりづらい。
しかし、(define (hogehoge x) ...)ってのはなんとなく呼び出した結果を定義してるみたいで嫌だ。

(defun hogehoge (x) ...
は良い。hogehoge っていう(関数)シンボルを定義してるんだなーって感じがしてわかりやすい。
724715:2007/10/17(水) 00:27:32
回答していただいてありがとうございます。
リストは基本的なデータ型しか入れられないんですね。
だから関数を入れると型が不明のシンボルとして扱われてしまうと。
勉強になりました。ありがとうございます。
725デフォルトの名無しさん:2007/10/17(水) 00:49:47
>>724
なんかちょっと誤解してるみたいだけど、まあそれはおいといて、
schemeでわかんなくなったら本スレの方においで。
このスレの住人はschemeコンプレックス発動で
それどころじゃないみたいだし。
726デフォルトの名無しさん:2007/10/17(水) 00:50:29
common lispで
gauche の util.math みたいなのありませんか?
無くても自分で作るんですが。
arnesiのmatcherが惜しい。
727デフォルトの名無しさん:2007/10/17(水) 00:57:43
質問の仕方がなってないな
gaucheのutil.mathとやらが何を提供してるのかまず書け
728デフォルトの名無しさん:2007/10/17(水) 01:52:07
どっちが上とか、コンプレックスなんて持ってるのは初学者だけだよ。
ある程度やってる人は、Common Lisp も Scheme わかってる。
どの言語が上とか下とかじゃなくて、用途によって使い分けてるだけ。
729デフォルトの名無しさん:2007/10/17(水) 01:59:05
>>723
コード中で(func args)っていう呼び出しを思いついたら、
そのまま(func args)をコピってきて(define (func args) 〜)とできるから
むしろ便利だと思うけどな。そもそも構文唐なわけだし。
defunは括弧の位置を修正しなきゃいけない。
730デフォルトの名無しさん:2007/10/17(水) 02:19:14
>>727
申し訳ない。
ML likeなパターンマッチライブラリで・・・と
clikiに似たのがあったので終了します。
ググっても無くググ子っても見付からないのでつい聞いてしまった。(code search)
731デフォルトの名無しさん:2007/10/17(水) 10:27:00
>>716
715では無いが>>715をマクロでやろうとするとどうなるんだ?
732デフォルトの名無しさん:2007/10/17(水) 13:08:09
(defun keisan1 (l)
(list (second l)
(first l)
(third l)))

(defmacro keisan (l)
(keisan1 (second l)))

(keisan '(1 + 1))
733デフォルトの名無しさん:2007/10/17(水) 21:27:18
(defmacro m (lst)
`(,(second lst) ,(first lst) ,(third lst)))

(m (1 + 2))
=> 3
734デフォルトの名無しさん:2007/10/18(木) 00:29:10
WINのGCLで一文字入力を待つのはどうやるのでしょうか
CLISPだとread-charでなんとなくできてしまうのですが
GCLだと待ってくれません。

735デフォルトの名無しさん:2007/10/18(木) 06:38:01
(dotimes (x 10) (progn (princ "hello") (sleep 1) ))
などとやって1秒ごとに表示させたい場合GCLではどうやれば
いいのでしょう。CLISPだとできるのですが
GCLだと10秒後にまとめて表示されてしまうのでうまくいきません。

736デフォルトの名無しさん:2007/10/18(木) 07:08:21
バッファをフラッシュしなさい。
force-output。
737デフォルトの名無しさん:2007/10/18(木) 10:45:26
ありがとうございます。
1秒ごとにちゃんと止まりました。

(dotimes (x 10) (progn (princ "hello") (read-char) ))
みたいなことはできないのでしょうか。一個表示するたびに
ユーザがなにかキーを押すまで待たせたいのですが、
LISP的には普通どうやるのでしょうか。
prognはLISP的にはよろしくないのでandをつかえ、と
本に書いてありましたが、
ということはLISPは逐次処理はタブーなのでしょうか・・・?

738デフォルトの名無しさん:2007/10/18(木) 14:11:17
>>737
> prognはLISP的にはよろしくない
なんでよくないの?
739デフォルトの名無しさん:2007/10/18(木) 15:43:18
>>737
Common Lisp で文字単位の入力を行う互換性のある方法は無いので、
今のところは read-line を使って Enter 入力待ちで妥協しておくのがいいよ。

ところで今更なぜ GCL?
740デフォルトの名無しさん:2007/10/18(木) 15:56:13
andにするべきだそうです。
741デフォルトの名無しさん:2007/10/18(木) 15:58:14
WINだとマルチバイトのファイル名と(SYSTEM)がつかえるのが便利ですね
742デフォルトの名無しさん:2007/10/19(金) 23:23:50
GCLって今更な処理系なんですか?
743デフォルトの名無しさん:2007/10/20(土) 00:43:51
うんそうだね
744デフォルトの名無しさん:2007/10/20(土) 10:46:00
今年の7月まではcommitが続けられてたし、今更って言う程終了したプロジェクトでもないぞ。
確かにこのまま停滞が続く可能性は否定できないが。
745デフォルトの名無しさん:2007/10/20(土) 12:05:13
LISP作ってる人ってなんだか
Windowsではあきらかにやる気ないですよね。
746デフォルトの名無しさん:2007/10/20(土) 13:01:21
Lisp に限った事じゃ無いと思うけど。
747デフォルトの名無しさん:2007/10/20(土) 13:57:03
切ないですね。
748デフォルトの名無しさん:2007/10/20(土) 14:37:22
Windowsみたいな処理系でやる気を出せというのが難しい。
まずはUNIX処理系で形にしておいて、それをWin用にポーティングするのが常に賢い。

Microsoftは答えじゃない。Microsoftは質問だ。そして、答えはNOだ。 -- Erik Naggum
749デフォルトの名無しさん:2007/10/20(土) 17:31:59
OSを処理系と呼ぶ人も珍しいね。
750デフォルトの名無しさん:2007/10/20(土) 17:46:03
>>745
逆。Windows の人たちが Lisp に興味ないんだよ。

ほとんどの Lisp 処理系の開発者は仕事でやってるわけじゃないので
他のプラットフォームへの移植までは難しい。
Windows プログラマから貢献がないとどうにもならないわけ。

自分の例で恐縮だが、俺程度でも SBCL の開発に手を出したら
FreeBSD での問題はずいぶん減ったし、thread や amd64 も
動くようになった。

どこの処理系も人材難だから、Windows プログラマが一人参加
するだけでも状況はずいぶん変わるはずだよ。使いたい処理系が
Windows でうまく動かないって思ってる人は、その処理系のソースを
眺めてみたら?
751デフォルトの名無しさん:2007/10/20(土) 19:50:18
Unix系でちゃんと動いてる処理系が多いのは、それが簡単だから。
Win32でちゃんと動かすってのは結構大変なんだよ。設計がぐちゃぐちゃだから。
いっそのこと .NET CLR 用に作るとか考えるほうが建設的な気がするな。
752デフォルトの名無しさん:2007/10/20(土) 20:09:46
>>750=旧よろずやの中の人
753デフォルトの名無しさん:2007/10/20(土) 20:14:50
>>750
FreeBSD ユーザーな Lisper の一人としてあんたには感謝しているぜ!
SBCL のスレッドに釣られて Linux に走る Lisp 仲間は多かったからな。
754デフォルトの名無しさん:2007/10/20(土) 20:18:36
>>752
>>750 は SBCL だろ? よろずやの人は CLISP じゃなかったっけ。
755デフォルトの名無しさん:2007/10/20(土) 20:55:29
>>754
よろずやの人はcmucl -> sbclメイン他いろいろ
です....って何かストーカーみたいだなw
756デフォルトの名無しさん:2007/10/20(土) 22:15:31
>>744
つうか数人のデベロッパしかないLisp系プロジェクトでは数ヶ月〜数年commitがないなんて良くあること。
基本的にLispのみで喰えてる人はいないんで、みんな余暇にしか作業しないからな。
先にRubyとかを見ていると止っているように見えるのかもね。

>>755
754はデベロッパーとしての話なんじゃないか。
757デフォルトの名無しさん:2007/10/21(日) 00:11:05
まあGCLはいろいろあったからね
758デフォルトの名無しさん:2007/10/21(日) 01:00:01
って何?
759デフォルトの名無しさん:2007/10/21(日) 01:22:30
確かメインの開発者が事故で亡くなられた。
760デフォルトの名無しさん:2007/10/21(日) 01:28:23
GCLってGNU Common Lisp?
761デフォルトの名無しさん:2007/10/21(日) 01:45:23
(質問は)そっちかよ…
762デフォルトの名無しさん:2007/10/21(日) 02:07:02
>>759
>亡くなられた
偉いなw
俺だったら"逝っちゃった"とか平気で書きそうな気がorz
763デフォルトの名無しさん:2007/10/21(日) 15:33:05
KCL な神たちはかかわってないの? GCL になってからは
764デフォルトの名無しさん:2007/10/21(日) 16:08:11
かかわってない
765デフォルトの名無しさん:2007/10/21(日) 16:11:49
LISPってリアルタイムの制御とかには使えるんですか。
766デフォルトの名無しさん:2007/10/21(日) 16:47:41
ゲームとかロボットで使ってる例はあるけど
GC とメモリフットプリントの問題を何とか
しなくてはいけない
767デフォルトの名無しさん:2007/10/21(日) 18:28:20
ロケットか衛星の制御に使ってて宇宙空間にあるのを地上からデバッグした
という話がどっかにあった。
768デフォルトの名無しさん:2007/10/22(月) 00:36:44
なんでもLispなんだよ
あっちに見えてる掃除用ロボットだってそうだよ
再帰できたらやりてえんだよ
おれ人工知能が書けるほどハッカーになれねえかな
計算機科学の巨人だよ
でもそうなったら自分で作った知能とやっちゃうかもしれねえな
機械だって色っぽいよお
769デフォルトの名無しさん:2007/10/22(月) 18:30:51
リストをシャッフルする以下のような関数を書いてみたんですけど、コンスがあったりしてあんまり上手くないと……
他に上手い書き方ってないでしょうか?

(defun shuffle (lst)
(labels ((shffl (lst acc)
(if (null lst)
acc
(let ((*random-state* (make-random-state t))
(len (length lst)))
(let ((rand (random len)))
(let ((nthrand (nth rand lst)))
(shffl (remove nthrand lst :count 1) (cons nthrand acc))))))))
(shffl lst nil)))
770デフォルトの名無しさん:2007/10/22(月) 22:49:39
>>769
破壊的にやってみた

(defun shuffle (list)
  (let ((st (make-random-state t))
        (len (length list)))
    (dotimes (i len list)
      (rotatef (car (nthcdr (random len st) list))
               (car (nthcdr (random len st) list))))))
771デフォルトの名無しさん:2007/10/23(火) 20:25:05
ありがとうございます。参考にします。
772デフォルトの名無しさん:2007/10/25(木) 22:56:58
8パズルを盲目的探索、深さ優先探索、幅優先探索を用いて解け

盲目的探索
初期状態#(8 3 1 0 4 7 6 5 2)
深さ優先探索
初期状態#(0 8 1 4 3 7 6 5 2)
幅優先探索
初期状態#(4 8 1 0 3 7 6 5 2)
この3つの目標状態は#(1 2 3 4 5 6 7 8 0)とする
実行フォームは(time...)で囲むこと

この問題が全くわかりません。。。どなたかお願いします
773デフォルトの名無しさん:2007/10/25(木) 23:35:20
SBCLに組み込まれている関数のリファレンスとかありませんか?

あと、現在定義されている変数の一覧とか確認できると便利なんですが・・・
→トップレベルで (setf xxx 111)で定義したxxxの一覧とか
774デフォルトの名無しさん:2007/10/25(木) 23:57:23
HyperSpec
775773:2007/10/25(木) 23:58:15
自己レスだが、リファレンス見つけた
全部英語だが・・・ orz

ttp://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node1.html#SECTION00100000000000000000

>あと、現在定義されている変数の一覧とか確認できると便利なんですが・・・
>→トップレベルで (setf xxx 111)で定義したxxxの一覧とか

↑これはご存知のかた教えてください m(_ _)m
776デフォルトの名無しさん:2007/10/26(金) 01:32:57
(loop for s being the symbols in *package* if (boundp s) collect s)
とか?
777デフォルトの名無しさん:2007/10/26(金) 16:55:01
777ゲット!
778デフォルトの名無しさん:2007/10/28(日) 16:24:23
与えられた引数が文字列であるか数値であるかを判断する…ってのはどないしたらいいんでしょうか。。
779デフォルトの名無しさん:2007/10/28(日) 16:29:18
numberpとかstringpじゃだめなの?
780デフォルトの名無しさん:2007/10/28(日) 16:33:16
>>779
ありがとうございました。
781デフォルトの名無しさん:2007/11/02(金) 00:36:22
Lispからテーブル形式のデータを出力して、エクセルなどで開いたり、逆に表形式のデータを読み込んで変数に値を貼り付けたりしたいのですが、そういうことは可能なのでしょうか。
Lispは、Allegro Common Lispを使っています。
782デフォルトの名無しさん:2007/11/02(金) 00:53:10
>>781
CSV
783デフォルトの名無しさん:2007/11/02(金) 01:35:10
CSVファイルを読み書きするプログラムを書けばいいんですね。
頑張ってみます。ありがとうございます。
784デフォルトの名無しさん:2007/11/03(土) 00:19:42
2つ以上続くアルファベットを、文字列に変換するにはどうしたらいいですか。
例えば以下のように。
abc -> "abc"

coerseだと一文字の場合しか変換できなくて困ってます。
785デフォルトの名無しさん:2007/11/03(土) 00:28:39
(string 'abc)
"abc"
とか
(format nil "~A" 'abc)
"abc"
とか?

xyzzyだとできるけど、他のはわからん
できないならスレ違いすまんw
786デフォルトの名無しさん:2007/11/03(土) 00:32:07
>>784
エスパーレスすると、君の知りたいのは symbol-name
787デフォルトの名無しさん:2007/11/03(土) 15:32:34
>>785
string使えました。ありがとうございます。

>>786
symbol-nameで、やりたかったことができました。
勉強不足ですみません。
788デフォルトの名無しさん:2007/11/04(日) 21:48:52
Lispって何ができますか?
789デフォルトの名無しさん:2007/11/04(日) 22:33:52
プログラムの記述ができます
790デフォルトの名無しさん:2007/11/05(月) 01:29:11
初心者に適した本はない?
もしくはサイトでもOK。

興味が沸いてきた。
791デフォルトの名無しさん:2007/11/05(月) 01:34:58
792デフォルトの名無しさん:2007/11/05(月) 01:44:58
いまANSI Common Lisp読んでる
793デフォルトの名無しさん:2007/11/05(月) 01:54:11
>>791
GIFアニメが鬱陶しくて集中できないw
794デフォルトの名無しさん:2007/11/10(土) 17:44:40
http://www.ibm.com/developerworks/jp/opensource/library/os-eclipse-lispcusp/index.html
きたぁぁぁぁぁぁっぁぁぁぁぁぁぁぁlっぁああああああぁぁぁぁl!!!!!!!!!!!!!!!!!!!!!!
795デフォルトの名無しさん:2007/11/11(日) 07:56:47
>>794
I love emacs だけど Cusp は気になるなー。
796デフォルトの名無しさん:2007/11/11(日) 10:52:05
気になるが、本スレ向けの話題じゃね?w
797デフォルトの名無しさん:2007/11/11(日) 17:00:05
本スレは最近調子がわるいのだ
798デフォルトの名無しさん:2007/11/11(日) 18:10:04
Eclipse自体が重いうえに、ちょっとした拡張にも手間がすげーかかるんで正直あんまり魅力を感じない…。
でもEmacs使わない層には評判いいね。見た目とか、IDEをマウスで操作したい層にはいいのかも。
799デフォルトの名無しさん:2007/11/12(月) 16:20:48
Emacs + slimeで十分だろ,常識的に考えて...
800デフォルトの名無しさん:2007/11/12(月) 19:02:27
JavaとかC++とかそのへんの、人間が面倒な手間を強要される言語だと
かなり便利なんだよ、IDE。
801デフォルトの名無しさん:2007/11/13(火) 00:45:43
>>799
emacsの代わりにeclipseなだけで基本slimeだから

エディタとのインターフェースにelisp使うかjava使うかってだけな話だよねぇ?
802デフォルトの名無しさん:2007/11/16(金) 21:15:11
newlisp使ってる香具師いる?
803デフォルトの名無しさん:2007/11/17(土) 00:50:35
CMUCLやSBCLでPOSIX Pipeなどを使って外部プロセスと
データのやり取りをするにはどうすればいいのでしょうか?
804デフォルトの名無しさん:2007/11/19(月) 11:09:27
doxygen みたいな自動ドキュメント化ツールってありますか?
日本語が使えると嬉しいのですが.
805デフォルトの名無しさん:2007/11/19(月) 22:11:15
>>804
作ればいいだろ。
それがLispクオリティ
806デフォルトの名無しさん:2007/11/19(月) 22:25:20
確かに Lisp でなら3日で作れそうな気がするな
気がするだけだがw
807デフォルトの名無しさん:2007/11/19(月) 22:43:22
>>806
(loop for x being each symbols in :mypkg
when (and (fboundp x) (eql (symbol-package x) (find-package :mypkg)))
collect (list x (documentation x 'function)))
とりあえずドキュメント文字列取りだしたから、後は任せた
808デフォルトの名無しさん:2007/11/19(月) 23:30:25
>>804
doxygenを使えばいいのかと
日本語も使えるわけなんだし。
809804:2007/11/20(火) 00:25:15
質問した私がアホでした。皆様ありがとうございます。
凝った事をしないで自分専用のツールにするんだったら、
html ぐらいまでは簡単に出来ますね。

>>807
パッケージの中の定義済みシンボルもそうやってすれば取り出せるんですね。
810デフォルトの名無しさん:2007/11/20(火) 14:58:45
PracticalCommonLisp の第22章だけ訳してみたんだけど、
投下してみるべき? それともチラシの裏に留めるべき?
811デフォルトの名無しさん:2007/11/20(火) 17:09:52
とりあえず投下してみるよろし。
812810:2007/11/20(火) 18:43:39
ttp://www.uploda.org/uporg1121370.zip.html
機械翻訳並みでもよければ…
813デフォルトの名無しさん:2007/11/22(木) 06:41:28
パッケージ a と b を両方共存させる方法はないですか?
(in-package a)
(in-package b)
とすると、a のパッケージで定義されたシンボルが
未定義になってしまいます。
814デフォルトの名無しさん:2007/11/22(木) 06:47:23
もうひとつ。異なったディレクトリにあるパッケージを、
C の include, libxxx.a の仕組みの様に使う一般的方法はありますか?
今の所以下の様にしていますが、allegro でしか使えません。
(setq system:*load-search-list*
'(:first
(:newest-do-compile
#.(make-pathname :type "fasl")
#.(make-pathname :type "cl"))
(:newest-do-compile
#.(make-pathname :directory "~/src/lib-lisp"
:type "fasl")
...
815デフォルトの名無しさん:2007/11/22(木) 11:50:47
>>812
もっかいうpたのむ
816デフォルトの名無しさん:2007/11/22(木) 13:12:38
俺からもうpたのむ

通報するから
817810:2007/11/22(木) 18:44:50
>>815
物持ちのいいうpろだ探し中

>>816
原著がネットで公開されててもまずいかなやっぱり
818デフォルトの名無しさん:2007/11/22(木) 19:04:18
基本的には、原著作者が、翻訳して公開することを明示的に許可してないと ×
819デフォルトの名無しさん:2007/11/22(木) 21:16:36
>>816
どうでもいいだろ,地下文章なんだから
堂々とWebに公開したらそりゃまずいだろうけど
pass付きzipで短期間だけ公開なら問題ないだろ
820デフォルトの名無しさん:2007/11/22(木) 21:54:34
lions' 本も現在なら
ファーストコピーのスキャン画像が流通するのかしらん
821803:2007/11/22(木) 21:58:25
(´・ω・`)
822デフォルトの名無しさん:2007/11/22(木) 22:01:16
>>821
socketじゃだめなのか?
823デフォルトの名無しさん:2007/11/22(木) 22:10:19
これが革命の狼煙になるとは思いもしない819であった。

824デフォルトの名無しさん:2007/11/22(木) 23:35:19
>822
socketに対応していない外部プログラムと繋げられたらばと考えまして
もっともsocketの使い方も勉強できたらうれしいです
825デフォルトの名無しさん:2007/11/23(金) 00:53:58
>>813
つか、常にパッケージ名に::を付ければ参照できる。冗長だけど。
多分本当にしたいのは以下のような事だろ?
省略したけど use-package とすればまるごとimportできる。

cl-user(2): (defpackage :a)
#<The a package>
cl-user(3): (defpackage :b)
#<The b package>
cl-user(4): (in-package :a)
#<The a package>
a(5): (defvar *foo* 813)
*foo*
a(6): (find-symbol "*foo*")
*foo*
:internal
a(7): :pa :b
b(8): (find-symbol "*foo*")
nil
nil
b(9): (import 'a::*foo*)
t
b(10): (find-symbol "*foo*")
*foo*
:internal
b(11): *foo*
813
826813:2007/11/23(金) 09:39:00
>>825
import と use-package ですね。これで相当便利になりました。
827デフォルトの名無しさん:2007/11/26(月) 00:38:07
on lispの翻訳も最初はこんなのりだったなw
828デフォルトの名無しさん:2007/11/26(月) 14:02:25
texのドキュメントを自動生成するscriptのsampleなどどこかに
ないでしょうか?
829デフォルトの名無しさん:2007/11/26(月) 22:37:26
slimeビデオの通りに

; SLIME 2007-11-19
CL-USER> (make-hash-table)
#<HASH-TABLE :TEST EQL :COUNT 0 {ACEED81}>
CL-USER> #<HASH-TABLE :TEST EQL :COUNT 0 {ACEED81}>

と、すると以下の通りに怒られます。

SB-INT:SIMPLE-READER-ERROR at 2 (line 1, column 2) on #<SB-IMPL::STRING-INPUT-STREAM {AD3B641}>:
illegal sharp macro character: #\< [Condition of type SB-INT:SIMPLE-READER-ERROR]

環境は、

debian etch
emacs22
sbcl-1.0.11-x86-linux
slimeはcvsで取ってきたものです。

.slime.lispには

#+sbcl (setq sb-impl::*default-external-format* :utf-8)
(asdf:operate 'asdf:load-op 'swank)
(setq swank::*coding-system* "utf-8-unix")
(setf swank:*use-dedicated-output-stream* nil)
(swank:create-server :port 4005 :dont-close t)

と、設定しています。
他に何か設定が必要でしょうか。
830デフォルトの名無しさん:2007/11/26(月) 22:54:23
>>829
slimeのビデオって何か知らないけど、、
「#<HASH-TABLE :TEST EQL :COUNT 0 {ACEED81}>」は手で入力したの?

「#<」ってのは read して元に戻らないものを表示するための記号。
(もとに戻るのは配列とかリストとかね)
よって、手で入力したんだとしたら何か勘違いしてるんだと思う。
831デフォルトの名無しさん:2007/11/26(月) 23:48:25
>>830
> >>829
> slimeのビデオって何か知らないけど、、

slimeのビデオです(サイズ150MBほどあります)。
ttp://common-lisp.net/movies/slime.mov

これによると

CL-USER> #<HASH-TABLE :TEST EQL :COUNT 0 {ACEED81}>

の後に

CL-USER> (eq #<HASH-TABLE :TEST EQL :COUNT 0 {ACEED81}> #<HASH-TABLE :TEST EQL :COUNT 0 {ACEED81}>)
T

こんなことしてるんですが
私の環境ではコケてしまいます。
832デフォルトの名無しさん:2007/11/27(火) 14:01:23
829の勘違いというかビデオを理解していないで終了。
833デフォルトの名無しさん:2007/11/27(火) 15:10:34
830を1兆回読むべきだろうな
834810:2007/11/27(火) 19:27:26
原著者の Peter さんに勢いで
「日本のフォーラムに翻訳を投下したいんだけど許可くれ」
ってメールしてみたんだけど、数日経った今日返信キタ

日本語化の動きは既にあるんで
グループを手伝うかどうかは君に任せるよ、とのこと
835デフォルトの名無しさん:2007/11/27(火) 21:29:18
829です。
>>830
手で入力しなおして気付きました。

>>832
> 829の勘違いというかビデオを理解していないで終了。

はい、理解してませんね
もうちょっと勉強します。

>>833
> 830を1兆回読むべきだろうな

さすがに1兆回はw
でも3回ほど読み直しました。

Emacs側の設定 face? mouse? 見直してみます。
みなさんコメントありあがとうございました。
お騒がせしました。
836デフォルトの名無しさん:2007/11/27(火) 22:15:54
>>834
その翻訳グループの詳細plz
837デフォルトの名無しさん:2007/11/28(水) 01:21:11
なんか、ひどい言われようだな。

slimeの#<で始まるのは、手入力やC-yで張ったものではないと思われます。
面倒くさいので、videoは見ていませんが。

私の環境では、
> CL-USER> (make-hash-table)
> #<HASH-TABLE :TEST EQL :COUNT 0 {ACEED81}>

の、返り値表示の上にカーソル置いてEnter、若しくはマウスで中クリックを
することによって、#<で始まる文字列が新規のプロンプト上にコピーされます。

この文字列は、lispのobjectとして評価可能です。
eqで比較も出来ます。

ちなみに、マウスの右クリックでメニューを出すと、色々選べて面白いです。
838デフォルトの名無しさん:2007/11/28(水) 01:57:25
>>837
どこがひどい言われようなんだ?
質問者の方に問題ありすぎで、829のような質問じゃ仕方ない流れだろう。
839デフォルトの名無しさん:2007/11/28(水) 18:59:01
流れをぶった切ってしまって申し訳ないのですが、ちょっと質問させてください。

たとえばPythonにはrange関数があって、0〜10のリストとか簡単に作れますが、
Common Lispにはrangeのような関数はないのでしょうか?
そのようなリストが欲しければmake-sequenceでリスト作ってdolistで回して初期化とかそんな感じなんですかね??
840デフォルトの名無しさん:2007/11/28(水) 19:25:37
loop はどうかね?
(loop for i from 0 below 10 collect i)
841839:2007/11/28(水) 21:27:44
>>840
おおお、ありがとうございます!
loopマクロでできないかチラッと見てみたことはあったんですが、
浅く踏み込んだだけだったのでbelowを知りませんでした。

前々から気になっていたイディオム(?)なのでスッキリしました。
どうもありがとうございます。
842デフォルトの名無しさん:2007/11/28(水) 22:39:55
843839:2007/11/29(木) 01:58:10
>>842
どうもありがとうございます。
勉強してきます。

loopマクロって結構面白いですね。
844デフォルトの名無しさん:2007/11/30(金) 03:06:35
マクロの活用による典型的なミニ言語だよね。
みんなが好き勝手にこんなもの作りだしたら煩雑になってたまらん、って
思いとどまったのがschemerでいいじゃん別に便利なんだから、って
開き直ったのがlisperなんじゃないかと個人的には理解している。

LOOPマクロマンセー
845デフォルトの名無しさん:2007/12/01(土) 17:15:09
829です。
>>837
> の、返り値表示の上にカーソル置いてEnter、若しくはマウスで中クリックを
> することによって、#<で始まる文字列が新規のプロンプト上にコピーされます。

私の環境ではこれがうまく機能していませんでした。
そこで、slimw-2.0を入れてみたところ出来るようになりました。

>
> この文字列は、lispのobjectとして評価可能です。
> eqで比較も出来ます。

そういう事なのですね。

>
> ちなみに、マウスの右クリックでメニューを出すと、色々選べて面白いです。

これから試してみます。
コメントありがとうございました。
846デフォルトの名無しさん:2007/12/02(日) 14:24:01
日本語文字コードの変換とかPOP3とかMD5とかGUIとか
そういう実用的なライブラリはあるんでしょうか・・・
有象無象に見える多数の処理系に様々な機能が分散して
るように見えて何がなんだかわかりません・・・。
今までPerlとTclを使ってやってたことを、Lispでやりたいんですが・・・
847デフォルトの名無しさん:2007/12/02(日) 14:47:51
>>846
http://www.cliki.net/index
あたりで探してみたら?
ASDFが使える処理系なら、
asdf-installをガンガンインストールすればいいので手間もかからんし。

ただし、もともとテキスト処理のために作られた言語でないので、
そこら辺はperlのような充実っぷりを期待しても無駄です。
GUI環境の整備も主たる言語の中では相当遅れていると言って良いです。
McCLIMも最近ようやくあまり落ちなくなったという程度だしw
848デフォルトの名無しさん:2007/12/02(日) 19:08:42
>>846
847の書いてる通り。
商用のAllegroCLなら、さすがに大分まし、だよ。
849デフォルトの名無しさん:2007/12/03(月) 00:10:26
オープンソースでフリーな商用CLに期待しましょう
850デフォルトの名無しさん:2007/12/03(月) 02:30:21
どうやって商売成り立たせんの、それ。
851デフォルトの名無しさん:2007/12/03(月) 13:50:46
MySQL方式かな
852デフォルトの名無しさん:2007/12/03(月) 20:46:35
いちおう、最後の砦として、ffi というのもあるけど、
なんでもかんでもリンクし始めたら、lisp を使ってる意味が無くなるかな。
853デフォルトの名無しさん:2007/12/03(月) 23:31:43
質問です。CLの正しいプログラムexprは
(or (atom expr) (symbolp (car expr)) (eq 'lambda (caar expr))
を必ず満たしますか?
854デフォルトの名無しさん:2007/12/03(月) 23:44:30
>>853
正しいプログラムってどういう意味?
正しい式の意味?
855デフォルトの名無しさん:2007/12/03(月) 23:55:41
>>854
(1 2 3)のようなものを式と呼ぶのか分かりませんが、
要するにevalを適用してエラーが出ないもののことです。

あと括弧閉じ忘れてますねすいません
856デフォルトの名無しさん:2007/12/05(水) 05:53:16
>>853
貴方の意図を汲み取るのが非常に難しい。
とりあえず答えてみると、
exprの部分を例えば(list 2 3 4)で置き換えた場合、
その式を満たしていないことになるけど、
それは自明だからたぶん意図を外しているのだろう。

一々、S式で書かないで、言葉で説明してみたら?
857デフォルトの名無しさん:2007/12/05(水) 07:51:02
>>856
予想すると、>>853はlisp処理系をlispで書こうとしているのでは。
知りたいのはフォームの定義と見た。
で、CLHS: Section 3.1.2.1 を見ると、>>853の定義でだいたい
当っているような気がする。
858デフォルトの名無しさん:2007/12/05(水) 09:25:01
(,,゚Д゚)∩先生、S式って何ですか?

        (´ー` ) >>853

 (  ゚д゚) ……

 ( ゚д゚ )
859デフォルトの名無しさん:2007/12/05(水) 09:59:34
処理系を書くとか、そういうのって適当にやると結局後で困るんだよね。
最初から定義を見て形式保ってやっていく方がいい。
860デフォルトの名無しさん:2007/12/05(水) 19:19:23
そうだLispを作ろう
 ↓
第一級でないオブジェクトってなんなの?
 ↓
リストの先頭に現れるらしい
 ↓
むしろリストの先頭に第一級オブジェクトが現れるのがおかしい
 ↓
リストは全部スペシャルフォームってことにすれば……
 ↓
……リストの先頭は必ずシンボルになる
 ↓
それなんてCL ←今このへん
861デフォルトの名無しさん:2007/12/05(水) 19:22:00
オブジェクトはすべて平等ですよ。
第一級オブジェクトという考え方自体がオブジェクト差別主義に毒されてます。
862デフォルトの名無しさん:2007/12/05(水) 19:24:24
ウィンストンのlispの3版に
lispでlisp処理系を作るとか
そういうのが載っていそうな気がする
863デフォルトの名無しさん:2007/12/05(水) 21:55:00
残念でした〜。CLではシンボル以外にlambda式もフォーム先頭にこれるんだな。
864デフォルトの名無しさん:2007/12/05(水) 21:57:49
ああそれはわかっているのか、ごめん。
865デフォルトの名無しさん:2007/12/05(水) 21:58:02
>>863
>>853にはちゃんとそう書いてありますね。

lispでlispを作るって一見無駄に見えますけど、
xyzzy lispでxyzzy schemeを作ったら便利そうですね。
とっくの昔に誰かが書いてそうですが。
866デフォルトの名無しさん:2007/12/06(木) 01:47:04
なぜ便利そうだと思ったのかkwsk
867デフォルトの名無しさん:2007/12/06(木) 21:35:32
ないよりあったほうが便利でしょ、CL的に考えて
868デフォルトの名無しさん:2007/12/06(木) 22:57:58
なんか誤解があるようだな?不要なものは不要だよ。
どっかで、「だれか一人でも提案したら通るのが CL で全員が賛成しないと通らないのが Scheme」みたいな比喩を真に受けた?
選考の末落とされた機能もいっぱいあるんだよ。まぁ、当時既に「歴史的事情」だったものもあるけどな…
869デフォルトの名無しさん:2007/12/06(木) 23:10:53
>>868
すまんが、何に対して突っ込んでるのかさっぱり分からん。
870デフォルトの名無しさん:2007/12/06(木) 23:21:11
頭の中で勝手に何段階も先へ進めた「キャラ設定」に向かって突っ込んでるから、
本人以外には誰の何宛の文章なのかすらわからんというケース。
871デフォルトの名無しさん:2007/12/07(金) 07:53:46
あーごめんなさい。意味不明だったな。
xyzzy lisp で xyzzy scheme 作ってもあんまりうれしくない気がする。
新しく Scheme ベースのエディタ作ったほうがいいんじゃない?
872デフォルトの名無しさん:2007/12/07(金) 08:35:53
>>871
どっかの院生がgauche+gtkのemacsライクなエディタ作ってなかったっけ?
挫折したのか最近情報がないけど。
873デフォルトの名無しさん:2007/12/07(金) 23:31:19
CLもやっぱりemacsであって
xyzzyの話題が出ると浮くなw
874デフォルトの名無しさん:2007/12/08(土) 12:53:03
>>873
意味不明
875デフォルトの名無しさん:2007/12/08(土) 13:20:21
abstract class Emacsen のようなものがあると便利だと思いました。
876デフォルトの名無しさん:2007/12/08(土) 16:11:34
teco?
877デフォルトの名無しさん:2007/12/09(日) 00:45:06
Emacsenが特定の言語に依存しないとすれば、それはきっと単なるGUIフロントエンドです。
878デフォルトの名無しさん:2007/12/09(日) 06:14:02
Common Lispの成分解析結果 :

Common Lispの64%は海水で出来ています。
Common Lispの23%は雪の結晶で出来ています。
Common Lispの7%は波動で出来ています。
Common Lispの3%は玉露で出来ています。
Common Lispの2%は不思議で出来ています。
Common Lispの1%は怨念で出来ています。
879デフォルトの名無しさん:2007/12/11(火) 21:40:47
lispのインタプリタをjavaで作るときに、コンパイルできるようにするのにどういった知識が必要なのかわからんです。
既にjavaの知識があることを前提にお願いします。

xyzzyのclファイルはエディタで眺めたのですが、自分1人では手におえない気がしました。
そこで書籍やインターネットの力を借りようと思ったわけです。

しかし、Cとかのコンパイラとは何か違うし、Lispにも中田 育男著「コンパイラの構成と最適化」が役に立つのかと疑問です。
また、初めからコンパイルすることを意識せずにインタプリタとしてのみ考えて、余裕があればコンパイルできるようにするのが妥当なのか?
色々疑問がつきません。

アドバイスをおねがいします。
880デフォルトの名無しさん:2007/12/11(火) 21:51:37
>>879
>Cとかのコンパイラとは何か違うし

一緒だよ。C をコンパイルする途中で木を作ると思うけど、
Lisp は読み込んだらいきなり木が出来ているのが違うだけ。
Java で作るのであれば GC も意識しなくて良いし。
881879:2007/12/11(火) 21:55:51
>>880
そうだったんですか。
木から先を作るだけなんですね。
アドバイスありがとうございました。
882デフォルトの名無しさん:2007/12/11(火) 22:40:52
普通は、エイホウルマン読め、と突き放すだろ
おまえら近頃やさしすぎ
883デフォルトの名無しさん:2007/12/11(火) 23:05:54
やさしい方が好き
スレの空気的に
884デフォルトの名無しさん:2007/12/11(火) 23:10:52
コンパイラとインタプリタを作った経験がある、
っていうんでなければ、インタプリタを勧める。
885デフォルトの名無しさん:2007/12/11(火) 23:15:22
そうですね。
まずはインタプリタだけで作ってみます。
ありがとうございます。
886デフォルトの名無しさん:2007/12/12(水) 00:52:40
まずインタプリタを作ってみれ。コンパイラが出すコードはそのソース専用に最適化された
高速インタプリタみたいなもんだから、作ればおのずと判ってくるはず。
887デフォルトの名無しさん:2007/12/14(金) 03:16:12
lisp宿題片付けスレとかないのか
ぜんぜん分からん
888デフォルトの名無しさん:2007/12/14(金) 09:25:03
宿題は何にしろ嫌われるが、
lispの宿題とは新しいな。いや古いな。
889デフォルトの名無しさん:2007/12/14(金) 10:44:42
最近は ML とか Haskell で関数型言語を教えるところも多い、ってこと?
890デフォルトの名無しさん:2007/12/14(金) 17:56:56
>887
ここで聞いてみたら?
大抵、親切に教えてくれる人が出てくるよ(多分)。

丸投げはあまり感心されないので、どういう風にどこまで考えたけど
分からなかったとか書いてくれるとベター。
891デフォルトの名無しさん:2007/12/16(日) 23:22:48
clは terpriとかがれがしーでうんざりする。
scheme様は newline でよい。
892デフォルトの名無しさん:2007/12/16(日) 23:47:39
terpriってlojbanの単語みたいだ
893デフォルトの名無しさん:2007/12/17(月) 00:41:11
>>891
歴史ある街のちょっとした不便さのようなものだから、気にせず誇りに思えばいいんだよ
894デフォルトの名無しさん:2007/12/17(月) 00:44:45
上手い事言うね
895デフォルトの名無しさん:2007/12/17(月) 00:46:00
format も?
896デフォルトの名無しさん:2007/12/17(月) 20:17:30
MLの本よりOCamlの本を見かけるようになった気がする。
プチブームと思ってたけどそんなに需要があるのかな。
Lisper/Schemerとしては"Reasoned Schemer"が翻訳された方が嬉しいけど。
あの3部作シリーズ、関数型言語入門から出発して論理型言語作成まで説明していて面白い。
このスレの住人は既読だと思うけど、まだ読んでない人がいたらお勧めします。
897デフォルトの名無しさん:2007/12/17(月) 21:00:20
Too many forms to variableとかなんとかってエラーメッセージがでまくるけど
どういうことなのか分からん
変数減らせってことか?
898デフォルトの名無しさん:2007/12/17(月) 22:16:09
>>897
おれ自動回答プログラムだけど、お前ふざけてんのか?
処理系と正確なコード、エラーメッセージを正確に書けよ(゚Д゚)
899デフォルトの名無しさん:2007/12/18(火) 02:13:12
最近の自動回答プログラムは優秀だな
900デフォルトの名無しさん:2007/12/18(火) 06:54:52
こんなケンカごしの自動回答プログラムいやだな
901デフォルトの名無しさん:2007/12/18(火) 07:36:35
自動解答プログラムでございます。
申し訳ありませんが、お客様のお使いになっている処理系と実行しようとしたコード、
エラーメッセージ等の情報をもう少しいただけないでしょうか?
902デフォルトの名無しさん:2007/12/18(火) 09:05:05
自動回答プログラムです。
理解不能です。もう一度質問を入力してください。
903デフォルトの名無しさん:2007/12/18(火) 12:31:28
自家発電プログラムです。
申し訳ありませんが、お客様のお召しになっているズボン/下着類を降ろし、
男性器を露出していただけないでしょうか?
904デフォルトの名無しさん:2007/12/18(火) 13:15:48
児童回答プログラムです

わかりません
905デフォルトの名無しさん:2007/12/18(火) 20:49:41
痔瘻快方プログラムです。

♪痔に〜はボラギノ〜ル
906デフォルトの名無しさん:2007/12/18(火) 22:23:40
自動回答プログラム多すぎるだろ
907デフォルトの名無しさん:2007/12/18(火) 23:15:15
流石人工知能言語w
908デフォルトの名無しさん:2007/12/19(水) 01:34:21
人工遅漏は上野クリニックLispで!!!
909デフォルトの名無しさん:2007/12/19(水) 01:47:43
バグってるのが多いみたいだな
910デフォルトの名無しさん:2007/12/19(水) 03:09:15
*** - EVAL: undefined organ cock
The following restarts are available:
USE-PENIS :R1 You may insert a penis to be used instead of (FDEFINITION 'cock).
RETRY :R2 Retry to find a new girl.
STORE-PENIS :R3 You may insert a new penis for (FDEFINITION 'cock).
ABORTION :R4 ABORTION
Break 1 [2]>
911デフォルトの名無しさん:2007/12/19(水) 12:40:14
ヤバかったうんこ流れないかと思った硬すぎて。
912デフォルトの名無しさん:2007/12/19(水) 14:47:13
おれもファミレスでうんこ詰まらせて逃げたことあるが、
あれは前の奴のうんこが悪いと思う
おれのうんこがとどめを刺しただけで、前のうんこが
致命的な壁を作っていた
多分女だな
913デフォルトの名無しさん:2007/12/19(水) 16:15:22
黒川小夏
914デフォルトの名無しさん:2007/12/20(木) 23:24:04
人工知能系は変態が多いらしいな
915デフォルトの名無しさん:2007/12/20(木) 23:35:28
ちんこ痴能
916デフォルトの名無しさん:2007/12/26(水) 23:12:54

スレタイ見て頭のいい人ばかりだと思ってのぞいてみたのに...

なに?このスレ...
917デフォルトの名無しさん:2007/12/26(水) 23:48:54
ちんこ痴能
918デフォルトの名無しさん:2007/12/27(木) 00:11:25
頭のいい自動回答プログラムばかりですよ
919デフォルトの名無しさん:2007/12/27(木) 07:37:38
>>916
ふだん頭の良い人に縁が無いせいで、
頭の良い人について間違ったイメージを持っていたのでは。
920デフォルトの名無しさん:2007/12/27(木) 13:00:12
そんな夢を壊すようなこと言っちゃ駄目だよ
921デフォルトの名無しさん:2007/12/27(木) 23:55:09
紙一重ってことさね
;;;一応スレタイは入門なんでございますよ>>916


;;全然関係なくは無いが自前言語でIDEまで作ってそれがLisp方言の再発明だと言うことを知ったときの衝撃ったらないぜよ
922デフォルトの名無しさん:2007/12/28(金) 00:11:48
>>916はノイマンが女のスカートめくってパンツを覗くのが趣味だった事を知らない。
ノイマンはパンティをハックしたがってたのだ。
923デフォルトの名無しさん:2007/12/28(金) 00:17:09
偉いハッカア様たちは入門などに興味が無いから、このスレは俺たち自動応答プログラムに任せて寝てるおられるのだ。
924デフォルトの名無しさん:2007/12/28(金) 01:17:33
>>921どんな言語?
925デフォルトの名無しさん:2007/12/28(金) 15:18:44
頭いいヤツって結構変体趣味を持ってる場合がある
926デフォルトの名無しさん:2007/12/28(金) 19:56:31
そりゃ頭悪いヤツも持ってる場合がある。
927デフォルトの名無しさん:2007/12/28(金) 20:06:03
二重盲検法で統計有意になるかしらん
928デフォルトの名無しさん:2007/12/28(金) 21:06:03
質問がこなくて皆暇をもてあましてるんだよ
だれか質問してよ
929デフォルトの名無しさん:2007/12/30(日) 23:57:19
930デフォルトの名無しさん:2007/12/31(月) 00:09:33
買わんだろうなあ。CLHSのほうが便利じゃね?
931デフォルトの名無しさん:2007/12/31(月) 05:47:53
一応買うよ。違った視点から見る事で自分の思い込みによる誤解とか変な解釈が訂正できるかもしれないし。
932デフォルトの名無しさん:2007/12/31(月) 08:00:38
>>929
おなじく一応購入だな。Apressは質が良いから期待。
933デフォルトの名無しさん:2007/12/31(月) 23:47:15
Hyperspecがあるにも関わらず出すということは、
それなりに自信があるんだろうな
934デフォルトの名無しさん:2008/01/01(火) 00:46:24
HyperSpec の解説なんじゃねーの?
935デフォルトの名無しさん:2008/01/01(火) 00:59:32
>>933著者はThinking Machineに居たような大御所だよ。ただ若い世代に受けるかどうかは知らん。
936デフォルトの名無しさん:2008/01/01(火) 01:35:36
ずーっと前から出版予定だけは立っててvaporware扱いだったよねそれ。
ようやく本当に出るのか。
937デフォルトの名無しさん:2008/01/02(水) 12:02:39
ソース読んでで、この人の〜のソースは勉強になるなあ、と思ったのには
どういうのがありますか?

例えば、Edi Weitzさんの〜は、〜の使い方について凄く勉強になる、とか
そんな感じの感想を教えてほすいな。
938デフォルトの名無しさん:2008/01/02(水) 23:11:43
会社の先輩やら教授やらのコードを読めば?
そうでなければ、pythonかrubyでも書てれば?
939デフォルトの名無しさん:2008/01/03(木) 00:53:41
>>937
lispだとソース置き場てきなサイト少ないからそういう機会少ないよね
俺も困ってる
940デフォルトの名無しさん:2008/01/03(木) 06:12:22
「渋谷から10分のゴルフ場」や どう書く.org に次第にソースが蓄積されてきてる
まっとうなソースじゃないかもしれないけど...
941デフォルトの名無しさん:2008/01/03(木) 10:02:25
オープンソースのシステムのコンパイラ辺りのソース読んでみた?
それでは不満だったのかな?
古いけどUtiLispは小さ目で読み易いかも
942デフォルトの名無しさん:2008/01/03(木) 16:00:40
937です。
ちょっと質問の表現が悪かったかもしれない。
感動したり感心したコードでソースが公開されてるのがあったら、
自分も是非読んでみたいから、教えて欲しいなと思ったんです。

どうかく、とか、ゴルフ場とかも覗いてみたいと思います。
Utilispもインストールして試してみてます。結構面白いかも。
943デフォルトの名無しさん:2008/01/03(木) 17:04:50
>>942
linuxのパッケージで結構あるような?(巨大だけど)
あとはLispworks用にスターターパッケージ集があるけどそういうのじゃだめなん?

とりあえず知らない人のコードは良悪にかかわりなく読む価値あるよ。
944デフォルトの名無しさん:2008/01/03(木) 22:02:04
>>940
とりあえず前者はお勧めできないな。
945944:2008/01/03(木) 22:07:35
と思ったけど、見るところを選べばそうでもないか?
format の使い方とか。
946デフォルトの名無しさん:2008/01/03(木) 22:21:03
>>944
あとリーダの挙動な。
他言語のゴルファーがコンバートしてくるには良いかもしれないけど
やっぱりゴルフのテクニックはゴルフ限定だよ。
947デフォルトの名無しさん:2008/01/05(土) 03:18:19
>>946
コード数を減らす意味のゴルフって意味?
948デフォルトの名無しさん:2008/01/06(日) 09:43:42
一般化の方向を考えれば、mapを使ってもいいと思うんですが
やっぱりリストに対してはmapcarなどのリスト専用の方を使うもんですか?
949デフォルトの名無しさん:2008/01/06(日) 10:10:45
>>948
mapcarで十分ならmapcarを使うべし。
基本的にspecificな方を使うのが良いと思うよ。目的がはっきりする
から人間に読みやすくなるし、コンパイラにとっては最適化の可能性がある。
他にもsetfが必要ならsetfを使うけど、setqで十分ならsetqを使う、
letで十分ならlet*は使わない、とか。

950デフォルトの名無しさん:2008/01/06(日) 12:27:25
>>949
thx
確かにそうですね、(first list)を(elt list 0)は嫌です
951デフォルトの名無しさん:2008/01/11(金) 04:48:25
Allegroダウンロードしたが、全く使いこなせない...
なってこったタイ
952デフォルトの名無しさん:2008/01/11(金) 07:20:18
>>951
Lispboxというすぐ使える環境をダウンロードしてみたら?
953デフォルトの名無しさん:2008/01/13(日) 16:46:22
S式のインデントに応じて振る舞いを変えられるような
マクロってかけませんか?
954デフォルトの名無しさん:2008/01/13(日) 17:16:20
マクロじゃなくてリーダーの方に細工するんじゃダメなの?
955デフォルトの名無しさん:2008/01/13(日) 18:45:19
>>954
どんな形でもOKです
956デフォルトの名無しさん:2008/01/13(日) 19:11:57
>>7のリンクのどこだかにpython見たいな事をリーダマクロで実行させてみるって記事が有ったと思うのだけどちょっと失念。
957デフォルトの名無しさん:2008/01/13(日) 20:55:53
これかな?最高にキモい(良い意味で)w
ttp://lispuser.net/memo/lisp/2006-03-30-23-58.html
958デフォルトの名無しさん:2008/01/17(木) 12:07:02
"(a b c d e f)"このような文字列を読み込んで
リスト構造として取り込むためには
(eval "(a b c d e f)")
ってやればいいんですよね?
(mapcar #'(lambda (x) (format t "~A~%" x)) (eval "(a b c d e f)"))
こうやってもエラーが出るのですがどうすればいいでしょうか?
959デフォルトの名無しさん:2008/01/17(木) 13:57:18
>>958
(read-from-string "(a b c d e f)")
960デフォルトの名無しさん:2008/01/17(木) 22:30:08
>>958
普通の言語だと eval しかないけど、>>959 が既に書いている
read があるのが lisp の大きな特徴だよ。
961デフォルトの名無しさん:2008/01/17(木) 22:43:56
macroexpandもね。
962デフォルトの名無しさん:2008/01/18(金) 00:19:10
>>960
そういう eval のある「普通の言語」って何?
963デフォルトの名無しさん:2008/01/18(金) 00:39:55
>>962
Rubyとか
964デフォルトの名無しさん:2008/01/18(金) 00:41:15
そうなんだ。知らんかった。
965デフォルトの名無しさん:2008/01/18(金) 01:10:15
色々なeval関数の例。いわゆるLLの有名所が揃っているね。
http://ja.wikipedia.org/wiki/Eval
966デフォルトの名無しさん:2008/01/20(日) 11:06:44
(A B C D E F G)
のようなリストをドット表記として再出力させるにはどうしたらよいのでしょうか?
967デフォルトの名無しさん:2008/01/20(日) 11:33:19
>>966
どんな出力を期待している?
968デフォルトの名無しさん:2008/01/20(日) 13:12:20
>>966
(defun print-dot (s)
(cond ((consp s)
(princ "(")
(print-dot (car s))
(princ " . ")
(print-dot (cdr s))
(princ ")"))
(t (prin1 s))))
969デフォルトの名無しさん:2008/01/21(月) 02:05:25
>>965
Lispについての記述はちょっと変だな。
Lispを知らない人が書いたっぽい。
970デフォルトの名無しさん:2008/01/22(火) 03:28:39
Lisp知ってる人が興味持たないところって琴田
971デフォルトの名無しさん:2008/01/22(火) 12:55:44
よくfooというのを見るのですが、
このfooというのはどこから来ているのですか?
972デフォルトの名無しさん:2008/01/22(火) 13:08:10
>>971
第二次世界大戦中の兵士たちのスラング
FUBAR "Fucked Up Beyond All Repair"(何もかもしっちゃかめっちゃか)  の最初のFUがfooになって
そこから着てるのではないか...という説がRFCに乗ってたような...
973デフォルトの名無しさん:2008/01/22(火) 14:28:59
これね(日本語訳)
ttp://www.puni.net/~mimori/rfc/rfc3092.txt
ttp://www.dourish.com/goodies/jargon.html から引用
FOO 1. [from Yiddish "feh" or the Anglo-Saxon "fooey!"] interj. Term
of disgust. 2. [from FUBAR (Fucked Up Beyond All Recognition), from
WWII, often seen as FOOBAR] Name used for temporary programs, or
samples of three-letter names. Other similar words are BAR, BAZ
(Stanford corruption of BAR), and rarely RAG. These have been used in
Pogo as well. 3. Used very generally as a sample name for absolutely
anything. The old `Smokey Stover' comic strips often included the
word FOO, in particular on license plates of cars. MOBY FOO: See MOBY.
974デフォルトの名無しさん:2008/01/22(火) 14:30:23
975デフォルトの名無しさん:2008/01/22(火) 14:31:43
ttp://foldoc.org/index.cgi?foo
...と、これはJARGONの転記か。
976デフォルトの名無しさん:2008/01/23(水) 07:08:45
スレチだが便乗で hoge の起源も知りたい
977デフォルトの名無しさん:2008/01/23(水) 10:07:29
978デフォルトの名無しさん:2008/01/23(水) 10:24:10
hogeんな! hage!
みたいな使い方で合ってますかね?
979デフォルトの名無しさん:2008/01/23(水) 19:16:57
hoge でググった上位 2 つだが

ttp://d.hatena.ne.jp/keyword/hoge

メタ構文変数
ttp://ja.wikipedia.org/wiki/%E3%83%A1%E3%82%BF%E6%A7%8B%E6%96%87%E5%A4%89%E6%95%B0
が解り易いだろう。
どっちも
ttp://kmaebashi.com/programmer/hoge.html
ここに行き着くけどな
980デフォルトの名無しさん:2008/01/23(水) 19:19:54
ttp://ja.wikipedia.org/wiki/Hoge がリダイレクトされる件
981デフォルトの名無しさん:2008/01/24(木) 21:41:47
GCLのコンパイル時について質問させてください。

(defun foo ( )
(if (終了条件)
finish
(progn (・・・) (・・・) (foo))))

以上のように、prognの最後に再帰呼び出しを持ってきた関数を作った場合、
末尾再帰として認識され、gccでコンパイル後にループになるのでしょうか?
982デフォルトの名無しさん:2008/01/24(木) 21:56:57
高い最適化レベルを指定すればループになるよ
983デフォルトの名無しさん:2008/01/24(木) 22:47:07
>>982
回答ありがとうございます。

高い最適化レベルというのは、
(declaim (optimize (speed 3)))
を宣言すればいいのかな。
間違っていたら指摘お願いします。
984デフォルトの名無しさん:2008/01/24(木) 22:53:19
>>983
そうそう。そんな感じ。
985デフォルトの名無しさん:2008/01/24(木) 22:58:12
>>984
ありがとうございます。
悩んでいたところなので、非常に助かりました。
986デフォルトの名無しさん:2008/01/26(土) 10:50:47
((lambda (x) (1+ x) 1)とか、先頭にlambda式が来るときってどうのように処理しているのですか?
987デフォルトの名無しさん:2008/01/26(土) 10:52:54
その lambda 式に引数渡して使ってるだけじゃね
988デフォルトの名無しさん:2008/01/26(土) 11:21:18
lambdaを他のシンボルに変えたいんですが・・・
989デフォルトの名無しさん:2008/01/26(土) 14:25:11
何をしたいかよりも、何故そうしたいかを述べるほうが的確なアドバイスが得られますよ
990デフォルトの名無しさん:2008/01/26(土) 21:17:03
>>986
他の言語なら処理系のソースコード修正するぐらい大変だぞ
判ってんのか?
LISPならマクロでできまちゅね〜よかったでちゅ
991デフォルトの名無しさん:2008/01/27(日) 00:01:36
>>990
ん?
lambda form は特別扱いだから <http://www.lispworks.com/documentation/HyperSpec/Body/03_ababd.htm>
たとえば
(defmacro λ (arg &body body) `(lambda ,arg ,@body))
としても
((λ (x) (* x x)) 10)
とはできないよ。
992デフォルトの名無しさん:2008/01/27(日) 07:40:46
>>988
リードマクロで妥協
(set-macro-character #\\
#'(lambda (strm char)
(cons 'lambda (read strm t nil t))))
993デフォルトの名無しさん:2008/01/27(日) 09:24:06
あーそっか。
CommonLispには*太古の呪い*が掛かってるんだよね:-)
994デフォルトの名無しさん:2008/01/27(日) 09:28:41
read-lineで読んできた文字列をリストにいれようとしてるんだけど
CPU100%になって終わるんだよね

(append リスト (リードラインうんたらかんたら))
これって禁則的な書き方なのか?
995デフォルトの名無しさん:2008/01/27(日) 10:21:19
うんたらかんたらがあやしい
996デフォルトの名無しさん:2008/01/27(日) 10:23:19
(while (append c (read-line in nil))
こんな感じ
lispの勉強全然進まない
997デフォルトの名無しさん:2008/01/27(日) 10:40:26
Append じゃなくて cons 使って最後に nreverse する.
今のだと O(N^2).
998デフォルトの名無しさん:2008/01/27(日) 11:36:34
>>993わざわざCLスレまで来て煽るのはちょっと恥ずかしいぞ。素直にScheme使えば?
999デフォルトの名無しさん:2008/01/27(日) 11:54:22
次スレのURL↓
1000LISPは死ぬ:2008/01/27(日) 12:00:28
             ,ィミ,        ,ィミ,               フ
              彡 ミ        彡 ミ,            ヤ |
           ,,彡   ミ、、、、、、、、彡  ミ,     (⌒)    レ  |   
          彡;:;:             ミ,    (  ヽ   ヤ
       〜三;:;:::::              彡〜  ノ  ノ   レ
       ~~三:;:;:;:::::  -=・=-   -=・=- 三~~ ヽ (    :     ;;
       ~~彡::;:;:;:;:::..     ___     ,三~~ ( ノ ,,,,,  :      ;;
        ~~彡;:;:;:;:;:;:;:.    |┴┴|    ,ミ~~ ノノ ;'" ,,ノ―、     ,;'
        ~~彡:;:;:;:;:;:;:;:;.  ノ――| ---==ニノ ,;'′ >=ニ(二二二()
   ,...-''''""~~,::;:;::;::;::;::;'            ミ,,  ,;'′  ゝ--〈
__,;";;:;;;;;;;;;;;;;;;;;;;;;:;:;:;:;:;:;:;            i! ミ,,,,;'′   `ー‐'
         ::::ミミミ:;:;:;:           ミ::      ,;' ̄ ̄ ̄ ̄|  \___/
          :::::ミミミ:;:;:           ミ:::,   ,;::''′        |.    \/
          ::::ミミミ:;:;::       ,;+''"~~゙+、~'''''~          |     |
           ::::ミミミ:;:;:;:     ,+'"     ミ:::::           |   ━┷━━━┳━━━━━
             :::::ミミミ:;:;:;:;:  >':;:       ミ::              |             ┃
           ::::::ミミミ:;:;:;:;:;../;:;:;:       ;:"             |             ┃
            ::::::::ミミミミ:;:/;:;:;:;:    ,.+'"''-、________|__         ┃
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄;':;:;:;:   ,.+'"    ミ、             l         ┃
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。