[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 04/21 19:13 / Filesize : 249 KB / Number-of Response : 867
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

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



1 名前:デフォルトの名無しさん mailto:sage [2007/06/10(日) 21:41:07 ]
lispを触ってみたい入門者のQ&A
初心者のQ&A
本スレでは恥ずかしくて聞けない人のQ&A
本スレは高度すぎて割り込めない人のQ&A
linuxでなくてwindowsでやりたいんですが・・・Q&A
lispを使用してC#やJAVAの代替にするための方法(おまけ)

ま、ゆっくりたりましょう。

「いいものの本質は、いかなる時代においても変わらない」byパワーズ

(list
(url pc8.2ch.net/test/read.cgi/tech/1101386936/l50 :part 1)
(url pc11.2ch.net/test/read.so/tech/1140012484/l50 :part 2))


577 名前:デフォルトの名無しさん mailto:sage [2007/09/24(月) 16:11:21 ]
>>571
ナカーマ w

578 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 00:54:33 ]
宿題ならちっとは考えたフリしろよw
もしくは宿題スレへ(lisperがいるかどうかは知らんが、lisp以前の問題だ)

580 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 03:05:54 ]
>>578
もちろん教えてあげますよ。
ただ、宿題を持ち込む人は多いんだけど情報不足なんだよね。

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

別にズバリ答えがほしいならそれで即解答しますんで、正直に答えてね。

581 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 09:53:44 ]
>>580
正直ズバリ答えてほしいのが本音ですが・・・

ヒントだけでも良いです。
締め切りは明日で、Lispは半年程やってます。教科書はありません。

582 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 13:19:14 ]
たぶん再帰で書いてほしいんだと思った

584 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 13:35:14 ]
すまん、インデントがメチャクチャになっちゃった orz



586 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 13:50:45 ]
まあ普通はループで書くと思うけどね。宿題だから再帰するのかなと。

587 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 13:53:05 ]
本題から外れるが、
>>584
>>反復を使うのを恐れるべきじゃない。
禿同。再帰を使うだけで問題の本質は露わになる、わけじゃない。
時と場合を選べば、LOOP最強。

588 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 14:50:13 ]
loop って末尾再帰とは限らないんだっけ?

590 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 15:02:38 ]
>>582
>>584
わからないとこ多いですね↓

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

関数の定義、分岐(if とかcond)
リスト(list car) データのリンク(cons)
とかですね。習ったのは。すいません
もうすこし自分で考えてみようと思います

591 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 15:39:20 ]
CL から見れば 588 の例なんかは
for(i=0;i<n;i++){list.push_back(&i);}
ってやって、あとで i のポインタの先の値をみて文句を言うのと同じようなダメさを感じるわけ。
再帰でしか物を考えられない Schemer は、CL を使うときはもっと考えを切りかえてからきてくれ。
Scheme は良いものだが、だからといって他のすべてのその思想を押しつけることなどできないのだ。
身近だから CL を煽りにくるんだろうけどさ……所詮どっちもマイナーな世界だ。お互いを尊重して仲良くいこうや。

593 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 16:08:10 ]
Schemer だって再帰を多用するわけじゃないでしょ
Shiro さんも言っていたけど fold や map、for-each や srfi-42 などのユーティリティを多用するのがスタイル
loop 的なものはあんまり使わないと思うけどね

594 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 16:15:30 ]
>>591
(format t
とか??なんですが

595 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 16:55:32 ]
>>594
おれは>>584じゃないけど、おまい授業出てないだろ。
format t は printf STDOUT みたいなもんだよ。~% はタダの改行。




596 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 17:00:33 ]
授業に出てるなら、こんなとこで質問する必要はないのでは?

597 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 17:19:39 ]
宿題を張った奴にここまで優しいのはこのスレくらいじゃね?


598 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 17:59:27 ]
宿題にはもっと妙な答えを教えてあげようよ。
今回のだったら tagbody と go で書くとか。

599 名前:デフォルトの名無しさん [2007/09/30(日) 19:15:23 ]
Scheme の srfi-42 を使って書いてほしいんです><

600 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 19:16:58 ]
>>599
そりはすれち

601 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/09/30(日) 22:43:18 ]
>>601
うほ! ありがとございます!
srfi-42 ムズカシイんです><
Gauche のマニュアルだけでは良くわかりませんでした><
サンプルがいっぱいのってるチュートリアルみたいなものがどっかにあれば、、、
スレ違いスミマセン


603 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 02:27:10 ]
コーモンリップス

610 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 02:38:30 ]
>>609
夜中にそんなこと言ってるからおまえは駄目なんだよ

611 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 03:04:53 ]
(´・ω・`)こ、こーもん・・・

612 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 22:22:06 ]
>>607
半年で let がでてこないのはすごいなぁ。
書いてもいいけど、もう締切は過ぎたんじゃないの?

ループによる解答は 582 で出てるよ。

613 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 05:12:01 ]
ある情報を処理するアプリケーションをC言語で書きました。
で、そのアプリケーションは処理結果としてdouble型の数値を3つ結果として出力します。
ここからが質問なのですが、
ウェブサーバを立ち上げて、クライアントが情報を入力すると、このアプリケーションが処理して
処理結果の数値をデーターベースに格納出来るようにしたいんです。
この用途にKahuaは使えるのでしょうか?
もしくはコレが出来るライブラリみたいな物は有りますでしょうか?


614 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 12:28:35 ]
>>613
そのアプリケーションをあなたが書いた物と仮定する。
やりたいことは可能だが、意味のある事じゃない。
むしろ元アプリケーションをfastcgiライブラリを使うように少し修正してmod_fastcgiを使うか
shellでcgiを書いて受け渡す方が楽だろう。


615 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 22:17:49 ]
>>614
意味がないとまで断定するこたぁないと思うが。
AllegroServe で R と連携する例。
cl-www.msi.co.jp/solutions/knowledge/lisp-world/r-demo/r_fuelframe



616 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 23:14:32 ]
>>615
元コードがCで書かれていて、さらにKahua上から制御できるかいと聴かれているのだから意味が薄いって事なんだよ。
しかもあなたの提示はAllegroServeじゃないか。
そりゃ元コードがCommonLispだったら楽しそうだし、もしも元コードがSchemeで書かれていればKahuaでの実装に美しさを感じるだろうことは否定しないんだけど。

ちなみに僕のおすすめはFastCGIでLisp実装っていうもっと尖っているけどApacheあたりと仲良くモードです。


617 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 23:38:40 ]
ヒント: ここは Common Lisp 入門スレ
Kahua でも AllegroServe でも別にいいんじゃね?
標準入出力/パイプ/ソケットで制御するなら別にどっちでもかわらんだろう、と思って R をごにょごにょする例を紹介したのだが。

618 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 23:51:05 ]
いいじゃん、「意味」なくても。
>>613 の要件ってLisperが気にするほど効率要求されてないと思う。

だとしたら、せいぜい AllegroServe+FFIとか、gauche からCを呼びだす方法とか
(おれはkahua知らないけど)、軽く面白そうな選択肢を教えてあげりゃいいんじゃね?

619 名前:デフォルトの名無しさん mailto:sage [2007/10/03(水) 23:52:08 ]
>>617
いや、CommonLispスレに元CコードをKahuaとまぜこぜ可能かって聴かれたからこそあの回答なんですけど orz
そりゃ僕だって全部CommonLispでってのはスレ的に正しいとは思うけどあんまりなんじゃないかい?

なんとなく質問した奴の状況が感じられる状況と似た境遇にあった俺が2ch的にあまちゃんなんだろうけどさ。


620 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 00:12:13 ]
「元CコードをKahuaをまぜこぜ可能か」って質問だったの?
「アプリケーションをC言語で書きました。」だからスタンドアロンな実行バイナリをイメージしてたよ。
んで >>615 を紹介したわけ。別に Kahua でもいいかなーと。run-program で起動して結果をうけとるでもいいんじゃねーと。
あくまで外部コマンド + Lispサーバで、「全部CommonLisp」とか書いたつもりはないけど…。

621 名前:デフォルトの名無しさん mailto:sage [2007/10/04(木) 00:24:45 ]
>>620
あー、今夜の僕は読解力ないかも(週も半ばなのに大分呑んだし)
僕が解釈したのは元の計算コードをCで記述済みでウェブサーバにKahuaを使った場合にそのCコードの産物とどうやってやりとりしたらいいの?
って事だったんで、そこまで境界がきれいにわかれてるならLispに拘らない方がいいのじゃないのっていうスレ的には正反対の結論がでちゃったんだ。

;;;うーむ、今受験の引っかけ問題や詐欺師がきたら死ねるなぁ。


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

宿題じゃないならごめんな。


625 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 19:18:18 ]
>>624
宿題です。
(A B C D)
ってあったらまずAをチョイスしてnum個のリストになるまでリストに要素を追加していくやり方を考えているんですがうまくかけないんです



626 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 22:03:55 ]
>>622
あのさー >>578 で全く同じ宿題がでてるんだけど。締切は 9/31 までだったんじゃねーの?
>>578 がウソつき野郎だったのかループを狙ってるのか……。たぶん君も前の彼も大学生なんだよな?
宿題の丸投げくらいはちゃんとできるようになろうよ?エスパー募集ばっかしてたら社会でやっていけないよ。
どんな関数使っていいのかとか、環境とか、締切とか、宿題丸投げするなら最低でもそのへんは書こうよ。

前の彼も後で「format知りません」「let も使わないでください」とかいいだすし。

627 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 22:10:20 ]
いや、問題はちょっとややこしくなってるぞ。
たぶん >>578 の続編だろう

628 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 23:24:28 ]
だからー、宿題に丸まる答えてあげるのやめなよ。
せいぜいヒントを出すとか、「こういう風に考えてやってみたけどうまく行きません、
どこがまちがってるのでしょうか?」と言う質問にだけ答えるとか。

丸まる答えたらますます自分で考える気を無くすよ、多分。

629 名前:622 mailto:sage [2007/10/07(日) 23:30:44 ]

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

numが0になるまで

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

みたいに考えたんですが(A) (A B) というリストをうまく保持しておけません。

630 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 23:35:30 ]
>>628
こんな所に質問しにくる馬鹿が今後どんな人生を歩もうと、そんなことどうでもいい

631 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 23:47:49 ]
出題者のレベルもアレな感じがするのは気のせいか

632 名前:デフォルトの名無しさん mailto:sage [2007/10/07(日) 23:52:47 ]
>>631
そうですね

633 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 00:02:15 ]
>>628
最初にそう聞いてくる奴ならそう答えるさ。だがちゃんと丸投げですと宣言したならズバリ答えを解答しちゃうよ。
もし本当にやる気があるなら、ズバリの答えでもちゃんと見て考えるさ。見とり稽古みたいにね。
全体図と筋道を見せてからゆっくり詳細を解析したいって人もいるかもしれない。
やる気がない人をむりやりやらせるなんてのは非生産的。

634 名前:622 mailto:sage [2007/10/08(月) 00:03:38 ]
>>633
やる気はあります!

635 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 06:21:28 ]
やる気があるのなら教官に聞けよ

637 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 06:41:15 ]
宿題がでると妙に活気づくなあ。よいよい

638 名前:デフォルトの名無しさん mailto:sage [2007/10/08(月) 08:29:35 ]
>>622
Scheme 臭いコードだなあ。
internal defun なんて意味不明なこともやってるし。

どこの大学のなんて香具師が担当してる講義なのか晒しちゃえよ。

639 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 09:02:43 ]
scheme臭がすると異常反応するスレw

640 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 09:15:13 ]
過剰反応っていう言葉はあるけど、異常反応ってのはあんまり聞かないな。

641 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 12:40:54 ]
Scheme臭に抵抗無かったらSchemeを使ってるよ

642 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 13:13:23 ]
俺はScheme臭に抵抗ない、むしろSchemeっぽい書き方の方が好きだけど、
Common Lispの便利な機能でSchemeにないものが多いからCommon Lisp使ってる

643 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 13:16:26 ]
たとえばなに

644 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 13:25:48 ]
スペシャル変数とか

645 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 20:24:02 ]
エレガントかつ強力なloop構文とか



646 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 21:04:26 ]
format

647 名前:デフォルトの名無しさん mailto:sage [2007/10/09(火) 23:45:18 ]
reader macro

648 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 01:03:54 ]
compile, eval-when, disassemble, trace, optimize ... とか?
でも Scheme も Gauche なら便利だから使うな。頭は別の言語として切り替わるのであんまり困る事はない。
むしろ片方を撰択して、もう片方を見下す、みたいな行為をやめて両方使えばいいじゃん。

649 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 01:17:20 ]
見下されたと錯覚した人が攻撃に転ずる気がする。多くの戦争と同じ原理だ。

650 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 01:30:52 ]
CL の人としては funcall はクソとか、*常に* 末尾再帰を最適化しないとクソ、みたいな一面的な見方に反論したくなる気持ちはわからんでもない。
が、実際にいちいち反論する人は 2ch 以外ではあんまりみかけないなぁ。

651 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 01:32:20 ]
そういや 622 はどうなったんだ?締切とか大丈夫なのか?

652 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 07:38:56 ]
ΣってどうやってCommon Lispで定義出来ますか?
リスト(2 4 6 8 )を全部足す奴。
なるべく再帰で。

653 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 07:58:10 ]
>>652
(loop for x in '(2 4 6 8) sum x)

654 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 08:38:38 ]
そういうときは apply 使うのが好きかな

(apply #'+ '(2 4 6 8))

655 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 09:53:05 ]
>>649
そんでもって、「見下してないよ、それはあなたの被害妄想だよ」と言い張れる言い方で見下すのが
ネットの基本戦術なんだよな。



656 名前:デフォルトの名無しさん [2007/10/10(水) 12:09:12 ]
ACLのアカデミック版って($99の奴)って
日本の学生って適応されないの?
ざっとみたところ、米国のみって記述が見つからなかったけれど。

657 名前:656 mailto:sage [2007/10/10(水) 18:03:34 ]
お金払ったのに、いつまでたってもソフトウェアダウンロードの案内がこない
(ストアのアカウント作成の案内も)と思っていたら、
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 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 21:01:45 ]
末尾再帰って指示ないなら出題者はこっちを意図してるかも

(defun Σ (list) (if list (+ (car list) (Σ (cdr list))) 0))

660 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 21:04:16 ]
>>654でまずい理由でもあるの?
>>658-659はΣでもなんでもなく、+の再定義でしかない

661 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/10/10(水) 22:34:35 ]
>>662
SBCL Windows 版はまだ誰もが使えるような状況ではありません。
試験的なリリースですので問題を自力で解決できる人向けのものです。
Windows 版自体がまだ実験的なものですので、EXE の生成機能は非サポートです。

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

664 名前:662 mailto:sage [2007/10/10(水) 22:46:09 ]
>>663
ご回答ありがとうございます。

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

いろいろと勉強になりました。
ありがとうございました。


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

# LispWorks や AllegroCL、CormanCL のような商用の話や、GCL, ECL, といった GCC をバックエンドに使う連中とかはまた別



666 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 01:40:48 ]
>>665
「Schemeのほうがいい」理由がよくわからん。
単にスタンドアロンバイナリをスマート作れない処理系が多いというだけでは?

667 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 02:19:03 ]
サイズはでかいけどwinのsbclでsave-lisp-and-dieは
結構まともに動いているように思う。

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

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



668 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 08:12:26 ]
便乗質問させてもらうけど

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

これらの条件を全て満たすフリー
もしくは比較的安価な商用Lisp処理系と言ったら
やっぱりCorman Lispが一番かな?
ブラットフォームはWindowsが前提です。

670 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 09:41:35 ]
Windows ってだけでフリーの実装はほぼ全滅だからね
Lisp で遊ぶなら UNIX

671 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 12:25:35 ]
>>669
比較的安価ってだけでLispWorksがそれに該当するんじゃない?
(対象がACLだから安く感じるだけかもしれんが)


672 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 13:23:22 ]
商用だとTorrentはまずいかな。

673 名前:デフォルトの名無しさん mailto:sage [2007/10/11(木) 13:46:22 ]
Windowsにポーティング中のSBCLはGCのバグまだ残ってるみたいね。
やる気ないにしても、POSIX以外だとそんなに移植が困難な実装なのかな?
それともWindowsで動かせちゃダメみたいな変な勢力が邪魔してるとか。

674 名前:デフォルトの名無しさん mailto:sage [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 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 01:45:55 ]
俺は OpenMCL をいつか弄りたいと思ってる。スレッド廻りきちんとしてそうだし、フットプリント小さいし。



676 名前:デフォルトの名無しさん mailto:sage [2007/10/12(金) 08:42:10 ]
OS7でMCL使ってたけどあの環境良かったなあ。

677 名前:デフォルトの名無しさん [2007/10/12(金) 20:55:25 ]
2ch発のLisp処理系作ろうぜ






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<249KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef