05/04/26 23:40:05
なんつーかサンプルのreadmeに書いてある手順でやると、
(jlinker-init)でエラーになるんだよな~。所詮Trialということかな。
>価格は過去スレにあった気がする。とても個人じゃ買えない。
マジで?
そうか、普通に7のProfessionalでも買うかな。まぁ10万強ぐらいだろう、多分。
これってProfessionalってネイティブコンパイルできたっけ??
458:デフォルトの名無しさん
05/04/27 00:23:16
ACL7のTrialって出てないですよね。ってことは6.2?
微妙に違うんでしょうね。6.2持ってないので確認できないですが。
Professionalでもネイティブコードにコンパイルはできます。ってTrialでもできて
ますよね?作成したアプリケーションの配布とかMySQL/Oracle Directが付いてないとか
いう点が異なってたと記憶してますが詳細はFranz Inc.に直接確認してください。
頼めばProfessionalで十分かどうか確認するために評価ライセンスも発行してもらえると思います。
459:デフォルトの名無しさん
05/04/27 00:32:47
>Professionalでもネイティブコードにコンパイルはできます。ってTrialでもできて
ますよね?
勇気を持って言おう!!
・・・知らなかった。マジで知らなかったorz
試しに適当なプロジェクトをコンパイルしたらなんかEXEが出来てた。
いや~なんつーか奥が深いねACLは。ちょっと首つってくるわ。
460:デフォルトの名無しさん
05/04/27 22:51:13
EXEってGUIでなければ作れないのかな?
VCみたいにDOS窓で動作するEXEは無理みたいだな~。
生成されたDLLからLispの関数名を抜き出して使おうかと思ったが、
dependencywalkerでも関数名もなにも出てこない。
きついのう。
461:デフォルトの名無しさん
05/06/02 01:21:34
#'hoshu
462:デフォルトの名無しさん
05/06/02 17:05:34
gclでcに変換してコンパイル汁
463:デフォルトの名無しさん
05/06/05 01:03:21
>>462
そんなことは出来ん
464:デフォルトの名無しさん
05/06/05 01:05:39
GCL は知らんけど、ECL はスタンドアローンなバイナリ作れるから GCL でも
出来んじゃないの?
Win で出来るかは知らん
465:デフォルトの名無しさん
05/06/05 01:14:29
>>464
スマン、出来た
466:デフォルトの名無しさん
05/06/05 01:16:38
オメデ�ォ
467:デフォルトの名無しさん
05/06/05 06:55:37
スキームのマクロについて丁寧に説明しているドキュメントない?
できれば日本語、ないなら英語でもいいや。
468:デフォルトの名無しさん
05/06/05 10:25:27
Schemeの話はスレ違い
469:デフォルトの名無しさん
05/06/05 11:19:23
>>468 なんだかしらないけど、病院行ったほうがいいよ。
470:デフォルトの名無しさん
05/06/05 14:06:22
ここはCommonLispのスレ
CommonLisp/Schemeスレは別に存在する
471:デフォルトの名無しさん
05/06/05 14:08:28
人少ないしSchemeネタもいいんじゃね?
マクロのことは入門Schemeとかにのってないのかな?
472:デフォルトの名無しさん
05/06/05 14:26:42
元々このスレはアンチschemerが立てたという経緯がある
そういう変な人の相手をしたくなかったら本スレでやったほうが良いかも
それでもここで続けるというのなら別に止めはしない
473:デフォルトの名無しさん
05/06/05 14:46:39
つーか、明らかに Common Lisp とは関係ない話題だし Scheme のスレもあるのに
このスレでやる理由は何もない。やめてほしい。
474:デフォルトの名無しさん
05/06/05 16:22:36
>>471
このスレだったか、もう一個のスレだったか忘れたけど、
本スレで Common Lisp の質問をしても、Scheme で返事が
返って来る事が多いのは S/N 比が悪いってことで立てられた
経緯があるから、Scheme ネタは宜しくないだろう。
わざわざ波風立てたい理由が分からん。
475:デフォルトの名無しさん
05/06/05 20:15:45
>>474
S/N比とかいってるアフォは、>>6だろ
しかしこのスレもあんまCommonLisp特有の話って続かないな
ちらほらSchemeの話にそれたりする
ところで、
【一日】CommonLisp【一門】
スレリンク(tech板)
こっちは放置か?
476:デフォルトの名無しさん
05/06/05 20:30:41
本スレは元々「Lisp Scheme」スレの筈で、
CommonLispはただのLisp属の1つという扱いだったんだが、
いつかの馬鹿がLisp->CommonLispに勝手に限定しやがった。
これはPart9か10辺りの出来事。
まあ、それでもCommonLispの話はほとんどされた覚えはないが。
相変わらずScheme寄りな本スレを見切ったのか、結局は
CommonLisp専用スレいくつか立って去っていったな。
そろそろ本スレは「Lisp Scheme」に戻そうかw
477:デフォルトの名無しさん
05/06/05 20:40:40
>>476
わざわざ波風立てたい理由が分からん。
478:デフォルトの名無しさん
05/06/05 20:56:55
>>477
Lispよりも波風が好きなんだろう
479:デフォルトの名無しさん
05/06/05 21:10:55
>>476
その辺の話は本スレの次スレ立てるときにでもまたしてもらえるとありがたい。
CommonLisp専用スレがあるんだから、もうどっちでもいいと言えばいいよ。
480:デフォルトの名無しさん
05/06/05 21:12:39
早期にEmacsLispと分離したのは正解だと思う。
CommonLispも同じ道を辿れればいいね。
481:デフォルトの名無しさん
05/06/05 21:21:27
やっぱ Lisper と Schemer は仲悪いんだな
大した違いは無いのに、何がこうさせるんだろう…
482:デフォルトの名無しさん
05/06/05 21:27:30
JavaとC++くらいには違うかもな。w
漏れは本スレも読んでいるが、ここはCommon Lispのスレなのだから
Schemeのマクロ(Common Lispのマクロとは大きく思想が異なる)の
話題はよそでやるのが当然だと思う。
これは仲悪いとかの問題ではない。
483:デフォルトの名無しさん
05/06/05 23:26:35
小さい人間
484:デフォルトの名無しさん
05/06/06 16:02:41
さて、ネタも溜まったしそろそろコードジンに発表していい?
485:デフォルトの名無しさん
05/06/06 21:28:37
>>484
出典:2chってちゃんと書けよw
486:デフォルトの名無しさん
05/06/07 08:04:05
向こうのスレでみんなで仲良くタライを舞わしていたらC++君が乱入の模様。
487:デフォルトの名無しさん
05/06/07 18:52:10
>>467
URLリンク(www.scheme.com)
が英語だけど、比較的詳しい。 あと、MzSchemeかDrSchemeの真乳有るあたりかな。。
488:デフォルトの名無しさん
05/06/12 21:10:08
こっちでいいかな。
Practical Common Lispの24章、25章あたりをざっくり読んでこうやってマクロは組み立てて
行くものなのかと感心しているところなのですが、ちょっと応用しようと思ったらすぐに方法が
わからなくてハマりましたので助けていただきたく。
やりたいことはdefine-binary-classとかのマクロでビットフィールドを持つ構造を扱いたいの
ですが・・・どの辺から発展させていったらいいんですかね?
一回のI/Oで複数個のスロットに値を配るのはできそうなんですが、その為の構文をどう設計する
べきかで悩んでます。無理にマクロにしないで泥臭く書いて行けばできるのは間違いないんですけど。
489:デフォルトの名無しさん
05/06/12 21:30:59
>>488
何に悩んでるかよくわからないけど、構文としては :bytes で指定するバイト数
の代わりに :bits でビット数を指定するみたいな具合にすればいいんじゃない?
490:488
05/06/12 21:54:40
スロット単位でreadしたものが流れて行っちゃう(こんな表現で伝わるかな)のは
マクロ側でいまストリームの何バイト目の何ビット目まで読んだ、みたいに自前で管理すれば
いいんですかね。
身近にLisp使いがいないんで、この本に出会うまで実際のコーディング上のノウハウみたいなの
知る機会がなかなか無くて随分と損した気がします。
491:デフォルトの名無しさん
05/06/12 21:59:26
>>490
まずビット単位でI/Oできるストリームみたいなのを構築(当然この中でバッファリング
する必要があるだろう)して、その上に作るのがいいんじゃないかな。
マクロにするかどうかというのは本質ではない気がする。
492:488=490
05/06/12 22:11:23
> マクロにするかどうかというのは本質ではない気がする。
本質ではないという意見も理解できるのですが、この章を読んでいてPaul Grahamが書いてる
ような「ミニ言語を作ってその言語を使ってプログラミングする」っていうのはこういうことかと
何となくわかったような気がしたのですよ。
逆に、いままでLispで自分流に書いて来たコードって全部「マクロ展開後」の結果をひたすら
書いて来たように感じました。それでもEmacsの中でちょいちょい変更してはテストしながら
やっていたのでC/C++/Javaよりは気楽に書いてましたけど(主観ですが)。
493:デフォルトの名無しさん
05/06/12 22:16:13
「マクロにするかどうかというのは本質ではない」と書いたのは、あくまで
バイト単位とかビット単位とかという議論に対しては、という話ね。
ま、気楽にやりましょ。w
494:488=490=492
05/06/12 22:32:46
> ま、気楽にやりましょ。w
ですね。
で、こっちなんですが >>まずビット単位でI/Oできるストリームみたいなのを構築
参考になりそうなドキュメントとかご存知ないですか?何でもかんでも自分で作っちゃうのが
Lisp屋さんの流儀みたいですが全然技量的に到達できそうもない今日この頃・・・
495:デフォルトの名無しさん
05/06/20 06:57:40
LispってCの#ifとかないの?
496:デフォルトの名無しさん
05/06/20 07:16:07
CL なら #+ #-
497:デフォルトの名無しさん
05/06/20 07:19:17
勿論あるよ。
URLリンク(www.lisp.org)
URLリンク(www.lisp.org)
URLリンク(www.lisp.org)
498:デフォルトの名無しさん
05/06/20 20:40:22
やっぱCLはこういうとこちゃんと考えてあるなあ。
499:デフォルトの名無しさん
05/06/21 07:10:59
Planet Lisp 見たら、SBCL で EUC-JP 使える様になったみたいでビクーリした
500:デフォルトの名無しさん
05/06/22 02:59:25
SBCL、いつになったらWindows portは出来上がるんだ……。
501:デフォルトの名無しさん
05/06/22 03:06:21
UTF-8は?
502:デフォルトの名無しさん
05/06/22 03:10:51
>>501
SBCLならかなり前からサポートされている
503:デフォルトの名無しさん
05/06/27 12:49:24
すみません、本スレを見ていて分からないんですが、
既存の関数名に別名をつけたい場合(nreverse に my-nreverse とつけるなど)、
Common Lisp ではどう書くのが良いんでしょうか?
504:デフォルトの名無しさん
05/06/27 14:02:55
(setf (symbol-function 'my-nreverse) #'nreverse)
505:デフォルトの名無しさん
05/06/27 14:20:09
いや、自分もそれでいいと思ってたんですが、本スレで「無知」と言われてたので、
何かもっと良い書き方があるのかなと。
506:デフォルトの名無しさん
05/06/28 00:18:10
(setf (fdefinition 'my-nreverse) #'nreverse)
507:デフォルトの名無しさん
05/06/29 00:16:54
変わんないじゃん。つうか、xyzzy には fdefinition はなかった。
508:デフォルトの名無しさん
05/06/30 10:20:04
俺は、本スレで煽ってた奴は、Common Lisp に fset があると勘違いしていた
んではないかと疑ってるのだが。
509:デフォルトの名無しさん
05/07/02 16:20:12
lispって配列は参照渡しですか?
510:デフォルトの名無しさん
05/07/02 18:20:15
>>509
うん
511:デフォルトの名無しさん
05/07/02 19:15:29
>>510
どうもです
512:デフォルトの名無しさん
05/07/02 21:51:40
…………… く ず れ す ……………
513:デフォルトの名無しさん
05/07/03 17:35:10
すいません、質問なのですが
(al-reverse'(a(b c)(d(e f))))
と与えたら((((f e)d)(c b)a)となり
中身が全て反転するような関数al-reverse
を定義するにはどうすれば良いのでしょうか?
514:513
05/07/03 18:23:18
自己解決しますた。失礼。
515:デフォルトの名無しさん
05/07/12 05:17:03
質問です。
普段使っている、lispアプリhogeがあって、
そのhogeをロードした後、必ず実行する関数(hoge-init)があるとします。
で、
(defun hoge-starter ()
(load "hoge")
(hoge-init))
の様な関数を、lispの起動時に読み込まれる初期化ファイル(.init.lisp)に
定義したいのですが、この定義をしてlispを起動すると、
`undefined function: hoge-init'
と、警告がでてしまいます。
この警告を消したいのですが、どのようにすれば良いでしょうか?
eval-when を使うのかと思って試したのですが、うまくいきませんでした。
516:デフォルトの名無しさん
05/07/12 09:42:48
>>515
まず使っている処理系や環境を書くように。
517:デフォルトの名無しさん
05/07/12 11:17:36
reverseを下記のようにプログラミングしました.
(defun my-reverse (l)
(cond ((null l) nil)
(t (append (my-reverse (cdr l)) (list (car l))))))
リスト内にもreverseをかけるべく再起処理を施したいのですが,
なかなか出来ません,お願いします.
518:デフォルトの名無しさん
05/07/12 12:24:49
(my-reverse (car l))
519:デフォルトの名無しさん
05/07/12 13:08:00
やれやれうちの大学の奴多いな。
520:デフォルトの名無しさん
05/07/12 13:31:40
>>519
おまいの大学の奴らだったのかw
521:デフォルトの名無しさん
05/07/12 13:44:40
>>519
お前もこのスレッド見ている時点でやれやれだなぁ.
522:515
05/07/12 14:44:44
>>516
失礼しました。
linux上で、cmuclとsbclを使っています。
523:デフォルトの名無しさん
05/07/12 15:26:05
>>521
見ているだけならいいんじゃね?
宿題を代わりにやってもらうってのはダメだが
524:デフォルトの名無しさん
05/07/12 16:29:19
2ch はおまいらの学校の校則には縛られません
525:デフォルトの名無しさん
05/07/12 16:44:22
宿題はさっさと教えてやった方が本人のタメにならなくていいな
526:デフォルトの名無しさん
05/07/14 11:59:58
なるほど!Common Lisp と Scheme のスレを分離したいという意見が多い理由
がわからなかったのだけど、やっと分かった。宿題を丸写しするためだったの
か!Common Lisp と Scheme の違いが分からないのなら、そりゃ混ざってちゃ
困るよなあ。了解しました。
◆「Lispに関する次の問いに答えよ」m(__)m
URLリンク(mentai.2ch.net)
↑のスレの1はさらに上を行く勇者で、Lisp と Ruby の違いも分からない。
まあ、別に悪いことだとは思わないけれど。私も興味のない科目はそんな風だっ
たし。
527:デフォルトの名無しさん
05/07/14 13:54:12
>>525
わらた。
528:デフォルトの名無しさん
05/07/21 05:48:46
ハッカーと画家 読んだことある香具師いる?
529:デフォルトの名無しさん
05/07/21 09:08:55
>>528
ノシ
530:デフォルトの名無しさん
05/07/21 23:47:57
>>528
ノシ
531:デフォルトの名無しさん
05/07/23 03:57:57
誰かCL-HTTPでhelloworld書いてくれ
俺のACLではloadできない
532:デフォルトの名無しさん
05/07/24 21:42:19
関数内で任意のz(関数内で使われていない変数)を定義して、それを値として使いたいのですが、どのようにしたらよいでしょうか?
533:デフォルトの名無しさん
05/07/24 21:42:53
期待age
534:デフォルトの名無しさん
05/07/24 22:35:57
>>532
よく質問の意味がわからんが、関数内で任意のz(関数内で使われていない変数)を
定義して、それを値として使えは良いのではないのか?w
535:デフォルトの名無しさん
05/07/25 16:35:07
>>534
説明が下手でサマソ。
なんというか、例えば全部のアルファベットを受け取ったときにも
まだ未使用のアルファベットとして定義して、そいつを値にしたいんだ
そんなことって可能なのか?
536:デフォルトの名無しさん
05/07/25 18:33:08
とことん説明の下手な香具師だな。
537:デフォルトの名無しさん
05/07/25 18:42:19
gensymでいいんじゃない?
538:デフォルトの名無しさん
05/07/25 23:54:43
二つのリストから最大値と最小値を1個づつ取り出し、この二数を割る
プログラムはどうつくればいいですか?
539:デフォルトの名無しさん
05/07/26 00:03:56
最大値を求めるプログラムと
最小値を求めるプログラムを書く。
二回走査するのがいやだったら
走査は一回にして最大値と最小値をリストにしてapply
540:デフォルトの名無しさん
05/07/26 02:35:34
おー久しぶりにのぞきにきたが,Lisp 関連スレが増えてる.
>>538 いいか,若いの.問題の定義がよくわからんが,考え方をおしえてやろう.
お前さんは
(欲しい関数 リスト1 リスト2) => (/ リスト1の最大値 リスト2 の最小値)
としたいわけだ?ならそう書けばよい.
(defun 欲しい関数 (リスト1 リスト2)
(/ リスト1の最大値 リスト2の最小値))
一度に考えるな.すぐにわからんものは関数にしてしまえ.
(defun 欲しい関数 (リスト1 リスト2)
(flet ((リスト1の最大値 ()
...)
(リスト2の最小値 ()
...))
(/ (リスト1の最大値) (リスト2の最小値))))
さて,こうすると,除算の問題はもう解けた.あとは
リスト1の最大値, リスト2の最小値という小さな問題を解くだけだ.
さて,日本語だと通らない処理系もあるから,↓のようにしよう.
(defun answer (list1 list2)
(flet ((max-of-list1 ()
...) ;; list1 の最大値を求める
(min-of-list2 ()
...)) ;; list2 の最大値を求める
(/ (max-of-list1) (min-of-list2))))
なに?授業を聞いてないしやる気もないから最大値も最小値も求められない?
そうだね, (apply #'max list1) や (apply #'min list2) でいいんじゃないか?
541:デフォルトの名無しさん
05/07/26 03:14:00
テキストには#ついてねーよ
progは習ったがfletはやってねー
ま、8クイーン頑張れよw
542:デフォルトの名無しさん
05/07/26 05:47:40
>>535
何か具体的にやりたいことがあるんでしょうから、
具体例を出しちゃった方が話が早いと思いますよ。
>>541
prog って使ったことないや。
tagbody つきの let みたいなんでしたっけ。
543:535
05/07/26 18:02:54
>>542
その通りです。
では、具体的な話。
λ計算中に現れる[lexp1/x]lexp2を表現する関数
(defun substitution (x lexp1 lexp2))の中で
x≠yかつφ(E)∋x、φ(Q)∋yをどちらも満たすなら
任意のλ式E、任意のz(ただしzはx≠z≠yかつ
(E)Qの自由変数でも束縛変数でもない)に対して
[Q/x]Ly.E → Lz.[Q/x]{z/y}E
って書き換えたいんです。
ここで、Lx.Ly.(y)xは(L x L y (y) x)と表現します。
544:535
05/07/26 18:04:30
あ、ここでっていうのは単なる表現の例です。あしからず。
545:デフォルトの名無しさん
05/07/26 18:10:14
>>543
相変わらず説明は下手だなぁ。gensymじゃ駄目なのか?
546:535
05/07/26 18:27:20
>>545
鬼 才 現 る !
すいませんでした。
>>537でも書き込んでいただいていたみたいなのにスルーしてましたorz
そんな関数が存在していたとは・・・知りませんでした。
ありがとうございました!
547:538
05/07/26 20:39:51
>>540 539
説明ありがとうございますm(_ _)m
やってみます。
548:デフォルトの名無しさん
05/08/07 00:16:00
このスレって、やっぱCommonLisp専用スレ?
EmacsLispやSchemeの初心者レスはすれ違いでしょうか?
549:デフォルトの名無しさん
05/08/07 00:20:37
>>548
うん。スレ違い。
このあたりかな。
スレリンク(tech板)
550:デフォルトの名無しさん
05/08/08 01:12:30
質問です。
(defun func (x)
(setq x 2))
(setq a 1)
(func a)
などとして、グローバルな変数をfuncの引数にして呼び出した時に
そのグローバル変数自体が書き換えられるような、
C言語で例えるならポインタ引数のような使い方をするには
どうすればいいのでしょうか?
551:デフォルトの名無しさん
05/08/08 01:20:58
トップレベルで変数を定義して、関数内でsetqなりsetfなりを呼び出せばOK
552:デフォルトの名無しさん
05/08/08 01:28:25
(set x 2) とか (setf (symbol-value x) 2) とか。お好きな方で。
関数に渡すのはシンボルね。
553:デフォルトの名無しさん
05/08/08 01:52:21
call by name にしたいならマクロ
(defmacro macro (x)
`(setq ,x 2))
(setq a 1)
(macro a)
a
=> 2
554:550
05/08/08 04:02:54
ということは、550で書いたコードをそのまま実行すると
(func a) の後はaの値は2になっているはずですよね?
でもトップレベルでsetqした値、つまり1になっています…
ここでどうにかaを2にしたいんですが…
質問の仕方が悪いのかもしれません、すみません
555:550
05/08/08 04:04:46
あああすみませんわかりました!!
seqじゃなくてsetを使うとできました。お騒がせしました…
とても助かりました。命の恩人です。
556:デフォルトの名無しさん
05/08/08 04:39:29
嬉しさは伝わるが、すごい表現。出来なかったら首でも吊ってたんだろうかw
557:デフォルトの名無しさん
05/08/08 11:44:30
>>556
わろす
558:デフォルトの名無しさん
05/08/19 04:41:05
すいません、LISPで画像処理をしたいのですが、
JPEGを扱うにはどうしたらいいのでしょうか。
いいライブラリがあったら紹介ください。
559:
05/08/19 09:05:28
gcl で substring が呼べないのはなぜでしょうか
560:559
05/08/19 09:20:57
ごめ。
(subseq "hoge" 0 2)
"ho"
で出来た。色々変わったのかね
561:デフォルトの名無しさん
05/08/25 04:45:03
選別収集ってどんなだったっけ
(mapcan #'(lambda (x)
(cond
ここまでおもいだした
562:デフォルトの名無しさん
05/08/25 06:02:14
選別収集ってなんだったっけ。
srfi-1 でいう filter-map?
563:デフォルトの名無しさん
05/08/26 01:30:58
(mapcan #'(lambda (x)
(cond ((predicate x) (list x))
(t nil))
list)
predicateがoddpでlistが'(0 1 2 3 4 5) なら '(1 3 5)が返る
564:デフォルトの名無しさん
05/08/26 02:09:00
(remove-if-not #'oddp '(0 1 2 3 4 5))
=> (1 3 5)
565:デフォルトの名無しさん
05/08/26 02:26:56
remove-if-not や delete-if-not やらは deprecated らしいよ。
URLリンク(www.google.co.jp)
(remove-if (complement #'oddp) '(0 1 2 3 4 5))
と書くそうだ。
566:デフォルトの名無しさん
05/08/27 03:33:37
deprecatedって推奨されてないってこと?
remove-ifはなんだか収集という感じがしない
mapcanにできてremove-ifにできなさそうなものを考えてみる
567:デフォルトの名無しさん
05/08/29 12:07:23
別にやってることの本質は同じじゃない?
選別収集を言い換えればつまりはいらないものを捨てるってことだろうし。
remove-ifでもlambdaつかえば結局同じことだと思うけれど。
568:デフォルトの名無しさん
05/08/30 02:11:36
mapcan でなら複数のリストを取って選別収集するようなことができるかな。
(mapcan #'(lambda (&rest x) (if (every pred x) x nil)) list) みたいに。
つか、実装の詳細は措いて、mapcan で書き下したもの(の限定版)に
名前をつけたもんがremove-if(-not) なんじゃないかいな。
569:名無しさん@そうだ選挙に行こう
05/09/11 21:38:55
lispでCGI組みたいんですけど、
Apacheから直接PHPとかPerlみたいにはできないんでしょうか?
mod_lispとかlispachとかgocheとかはネットで調べたんですが、
なんとなくすっきりしません。
やっぱ自分で作るしかないのかな?
570:名無しさん@そうだ選挙に行こう
05/09/11 23:01:59
>>569
> なんとなくすっきりしません。
詳しく
571:デフォルトの名無しさん
05/09/12 12:46:48
Portable AllegroServeは?
表にApache建てたいならmod_proxyで。
572:デフォルトの名無しさん
05/09/12 23:20:06
>>570 えーと、つまりPerlやPHPのようにApacheのModuleとして組み込んで
直接ApacheのAPIを操作できるようにならないかということです。
>>571さん、なんとなくすっきりしないといったのは、
こういったApacheから何かを介してLispへアクセスするというのが、
私にとっては違和感がありまして…。
最近になってプログラミングをやりだしたものですので、
変なこと言ってるかもですが、
Apacheを使ってsoapとかのWebserviceのxmlを読み込み、
Routerのようにできないかなと思ってまして。
もちろん他の言語でもできるのですが。。。
こんなLisp初心者にご解答ありがとうございます。
573:デフォルトの名無しさん
05/09/26 03:17:10
Cで書くLISP処理系の本で今手に入るものはあるんでしょうか
大学近くの古本屋を回ってもあんまり理工書がないんですが
574:デフォルトの名無しさん
05/09/26 12:07:11
LISPでGoogle検索すればゴロゴロ転がってる気が
昔のアスキーのCプログラムブックIIIは独自LISP処理系扱ってるけど
今風の実装じゃないし
個人的には末尾再帰できない独自LISPはあんま魅力ないな
自分で作るならSchemeの方がいい
575:デフォルトの名無しさん
05/09/26 12:11:52
>>574
末尾再帰の実装なんて普通のLispでもさほど難しくはない。Schemeは
full continuationの実装など悩む割に報われない部分で苦労する。
まぁ作ってみるだけなら面白いけど、実用的な処理系は結構大変。
576:デフォルトの名無しさん
05/09/26 12:14:50
難しいかどかじゃなくて末尾再帰も標準的でない独自LISPには魅力感じないつってんの
577:デフォルトの名無しさん
05/09/26 12:17:57
>>576
おまえスレタイ読めるのか?
スキームの宣伝は他でやれよ。
578:デフォルトの名無しさん
05/09/26 12:20:35
ちなみにちゃんとしたSchemeでも継続はあんま使わないよ
別に無くてもなんとかなるレベルでしょ
ただし末尾再帰は無いとコーティングスタイルにまで影響する
最適化の余地があるCommonLispならともかく、
独自LISPにはもう期待できる事が何も無い
579:デフォルトの名無しさん
05/09/26 12:23:36
>>577
スキームの宣伝て何?
おまえこそちゃんとレス読めよダボが
580:デフォルトの名無しさん
05/09/26 12:28:57
>>578
はぁ?
> 最適化の余地があるCommonLispならともかく、
> 独自LISPにはもう期待できる事が何も無い
何か言ってる意味わかんねよ。
Common Lisp系の独自LISPとかイメージできないの?
581:デフォルトの名無しさん
05/09/26 14:26:44
>Common Lisp系の独自LISP
イミフメ
582:デフォルトの名無しさん
05/09/26 21:57:00
見事に話が噛み合ってないな(w
ちなみに漏れは580の言ってることは理解できる派ね。まぁただでさえマイナーな言語に
関わってる者同士マターリと行こうや。
583:デフォルトの名無しさん
05/09/27 01:25:11
末尾再帰の最適化をするのは Scheme だけじゃないしね。
俺も継続は無くても良いけど、末尾再帰の最適化は欲しいなぁ。
584:デフォルトの名無しさん
05/09/27 01:36:27
>>583
以前話題になった気がするけど、Common Lispにおける末尾再帰の最適化は、
・インタプリタはほとんどの処理系がやらない
・コンパイラはほとんどの処理系がやる
という結果だったと思う。Common Lisp的思想からすれば順当なところだろうね。
585:デフォルトの名無しさん
05/09/27 02:42:55
Scheme 勉強したてで毒されてるな.
末尾再帰の最適化はメリットばかりじゃねーんだぜ?
インタプリタ上では *常に* 最適化されちゃったらデバッグしにくいだろ?
Common Lisp 的思想なら,コンパイル時の最適化オプションで
制御できるほうが嬉しい.
末尾再帰の最適化を示すオプションが欲しいって話もあるけどな.事実上,
speed 3 とか debug 0 にしとけばほとんどのコンパイラがやってくれっからねぇ.
586:デフォルトの名無しさん
05/09/27 11:44:41
>>585
> インタプリタ上では *常に* 最適化されちゃったらデバッグしにくいだろ?
これはスタックトレースが取れないとかそういう意味?
587:デフォルトの名無しさん
05/09/28 02:18:03
常に最適化されちゃって選択できねーとかははやすぎる最適化の部類に感じる時がある.
CL 派としては c.l.l で出てた宣言的アプローチで解決してほしいなー.
「可能な限り最適化する」「自己呼び出しとローカル関数のみ最適化」「自己呼び出しのみ」「最適化なし」
とかが宣言できるみたいな.まぁ,現状はコンパイラのマニュアルを見る必要
があるわけだけど,それで不都合あるのかっつーはなし.Common Lisp におけ
る末尾再帰の最適化はだってほぼ標準だしね.
588:デフォルトの名無しさん
05/09/28 02:22:10
>>587
結局Common Lispの仕様の問題になるわけだよな。20年間にわたって仕様が安定
している(ANSIでわずかに変更されたところもあるが)のは利点でもあるわけだが、
そろそろ次期規格の話が出てきても良いように思う。
589:デフォルトの名無しさん
05/09/28 09:10:11
元々の話が>>573なわけで・・
590:デフォルトの名無しさん
05/09/28 14:17:11
Schemeばかり書いてると、関数呼び出しが関数呼び出しに
見えなくなるというか、全部継続へのジャンプに見えて来るんだよな。
それに関数とブロック(let)が頭の中でブレンドされて区別されなくなる。
そうすると自己末尾呼び出しだけ特別扱いしたりするのがとても不自然に
感じる。
まあ、Common Lispの空気に合わないってのはわかる。CLで書くときは
スタイルが変わるからな。
591:デフォルトの名無しさん
05/09/29 01:15:48
このスレこんなに人がいたのか(^_^ゝ)
592:デフォルトの名無しさん
05/09/29 03:42:33
>>588
仕様の問題ねぇ.改善の余地(個人的希望は >>587 な)があるとは思うが,
Scheme が The Right Thing だとは思わない.なぜなら,俺には区別したい
時があるからだ.最適化する,しないは選択したい.まぁ,その選択肢が
存在するのが不自然だと言われりゃしょうがねーけどなぁ.
ま,CL にも末尾再帰の最適化は実装依存だが,「ある」という事を言って
おきたかったわけ.
593:デフォルトの名無しさん
05/09/30 19:03:53
lispファイル用の良いアイコン知りませんか?
594:デフォルトの名無しさん
05/09/30 23:27:09
>>593
自作すれば。
↓雛型
(())
595:デフォルトの名無しさん
05/09/30 23:31:51
Planet Lisp のサイトアイコンは () だね
596:デフォルトの名無しさん
05/09/30 23:36:49
>>593
λ
597:デフォルトの名無しさん
05/10/01 00:34:23
(car cdr)
なんてどうだ
598:デフォルトの名無しさん
05/10/01 01:19:05
>>592
CommonLispで以下の相互再帰がループになる保障があるってわけじゃないでしょ?
こういうとこで根本的にコーティンングスタイルに関わってくるわけ。
(defun f(a) (g a))
(defun g(a) (h a))
(defun h(a) (f a))
(f f)
Schemeでトレースしたけりゃ末尾再帰の最後に適当な置石すりゃいいだけだし。
既存の処理系にも普通にバックトレースぐらい存在してるでしょ。
599:デフォルトの名無しさん
05/10/01 01:28:56
>>598
言いたいことはわかるけど、だからCommon Lispは駄目、Schemeが良い
という話をしたいのであればスレ違い。そもそもここはCommon Lispのスレ
なので、もうちょっと建設的に考えてほしい。
例えばCommon Lispで末尾再帰を強制するようなdeclareを提案するとか。
あと、念のために言っておくと相互再帰をループ化する最適化はさほど
難しくはないので多くの処理系がやっているはず。
600:デフォルトの名無しさん
05/10/01 01:51:26
>>599
あのな、CommonLispをどうこうしようってんじゃなくて、>>573の回答として
独自LISP勉強して作るぐらいならScheme作っとけって話。
CommonLispがどこまで最適化できるとか云々は別に興味ない。
601:デフォルトの名無しさん
05/10/01 01:55:45
>>598
そりゃ環境を問わずあらゆるCL処理系で動く必要のあるコードとかいうなら
仕方がないけど。元々の方向性が違うんだから仕様の問題というよりは
そういうスタイルでCLを選択する方が間違ってるんでは。
ちゃんと末尾再帰を最適化する処理系を使えばいい話でしょ?
相互再帰だろうが末尾再帰だろうが基本的に違いはないよ。
cmuclでも、declareも何もせずにreplからそのままdefunして直ぐにdisassemble
しても、ちゃんとジャンプになってるよ。
602:デフォルトの名無しさん
05/10/01 02:10:36
>>600
別に>>573氏はおまえが使う処理系を作ろうというんじゃないと思うぞ。w
おまえの好むScheme的スタイルをCommon LispスレでLISPの処理系でも
作ってみようかという奴にしつこく言う必要はあるまい。
603:デフォルトの名無しさん
05/10/01 11:21:07
>>598
すると,あなたは R5RS にないものは使わないのですか?
事実上標準だと主張しているのだが.メインストリームの商用
コンパイラで末尾再帰の最適化機能を持たないコンパイラがある
のかと.Scheme ではコンパイルについての規格がないから,
安心してコンパイルできない!! というくらいの心配症の人なら
まぁ,止めないけどね.
> Schemeでトレースしたけりゃ末尾再帰の最後に適当な置石すりゃいいだけだし。
残念な結末ですね.大規模なプログラムでそれが簡単な事だお思いますか?
末尾再帰の最適化を OFF にしたら Scheme じゃないんでしょ?
Scheme の処理系依存機能はよくて,CL の処理系依存機能はだめなんですか.
そんな事言うなら,CLOS 相当の機能がなく,したがって安全にオブジェクトの
定義を更新できないほうが嫌だ.
再帰というトンカチを手にすると他の全てが再帰に見えてくる.ループは
再帰の特殊系だけど,本来並列動作とかもあるから
(map fn lst)
を見て,再帰的な実装がまず第一に頭に浮ぶならもう一度良く考えたほう
がいい.
604:デフォルトの名無しさん
05/10/01 11:36:24
つうか,>>600 からしておかしい。
俺なんか既存の概念をくつがえすようなトンデモない
処理系を期待しちまうけどな。がんばって勉強しろーよ。
最初はショボくても独自 Lisp 上等。Lisp の進化の歴史を
学ぶもの一興。
まず自分で作ってみれば?ショボショボインタプリタとかでいいから。
つうか 573 を応援してやりたいが,情報がないな。
Lisp/Scheme の腕前と C の腕前はどーなんだろう。
605:デフォルトの名無しさん
05/10/01 12:02:37
馬鹿だなおめーらは
606:教えて厨
05/10/01 16:54:07
質問。
(-1 3 2 5 3 -3 -4)
というようなリストがあるとしますよね。
これを
((-1 -3 -4) (3 2 5 3))というように負数と正数で別々のリストに分類したい。
これ、負数だけとりだす関数と正数だけ取り出す関数を作って、
それをlistすれば簡単にできるけど、
再帰関数ひとつだけで作る方法もあるんだよね??
それってどうやるの?
letやlet*なんかでnilとかに初期化した変数って、再帰で呼び出すと
再帰呼び出し先でもまたnilとかになるの?
再帰呼び出し先で再帰呼び出し元での変数の値が引き継がれるような方法
があればうまくやれそうなんだけどなあ。
みなさんなら、どうやって再帰関数一つだけで、上のような処理を実装できますか
607:デフォルトの名無しさん
05/10/01 17:31:36
LOOPマクロ
(defun plus-minus (list)
(loop for x in list
if (>= x 0) collect x into plus
else collect x into minus
finally (return (list minus plus))))
再帰
(defun plus-minus (list)
(labels ((iter (l plus minus)
(if (null l)
(list (nreverse minus) (nreverse plus))
(let ((x (car l)))
(if (>= x 0)
(iter (cdr l) (cons x plus) minus)
(iter (cdr l) plus (cons x minus)))))))
(iter list '() '())))
608:デフォルトの名無しさん
05/10/01 19:49:26
質問させてください。
(setq a t)
とした変数aの真偽を連想リストに入れてやりたいのですがうまくいきません。
(setq b '((res . a) (res2 . ....)))
みたいにすると(cdr (assoc 'res b))はtではなくaを返すし
(setq b '((res . (eval a)) (res2 . ....)))などとしても同様です。
環境はxyzzyです。どうかお願いします。
609:デフォルトの名無しさん
05/10/01 20:16:30
(cdr (assoc 'res `((res . ,a))))
610:デフォルトの名無しさん
05/10/01 20:29:24
そんな説明なしで得意げに書かれてもな・・
611:& ◆6g4XpN.URU
05/10/01 20:35:27
>607
どうもありがとう。
ちなみにiterって初めてみるんだけど、どういう関数なの?
612:608
05/10/01 20:53:15
>>609
ありがとうございます。backquoteを使ってなんとかするということですね。
確かにまだよくわからないですが勉強します。
613:デフォルトの名無しさん
05/10/01 20:57:32
>>611
labelsの行をじっと見つめてみろ。
614:デフォルトの名無しさん
05/10/01 23:13:06
>>612
quoteしたら評価されないって言うことです。
quoteしないようにこんな感じで書けばOK
(setq a t)
(cdr (assoc 'res (list (cons 'res a))))
いちいちこう書くのは面倒だからbackquote構文が用意されてる
って感じかな。
615:デフォルトの名無しさん
05/10/01 23:15:33
言っとくけど、backquoteもマクロなんだぜ?
マクロって偉大だよなあ・・・
616:デフォルトの名無しさん
05/10/02 04:39:29
>>606
宿題だとすると labels の内部関数はつかっちゃだめかも?ということで
親切にも別解だっ.
;; 再帰関数一つ
(defun plus-minus (lst &optional plus minus &aux (x (car lst)) (xs (cdr lst)))
(cond ((null x)
(values plus minus))
((>= x 0)
(plus-minus xs (cons x plus) minus))
(t
(plus-minus xs plus (cons x minus)))))
;; メソッド一つ
(defmethod plus-minus-2 ((lst null) &optional plus minus)
(values plus minus))
(defmethod plus-minus-2 ((lst cons) &optional plus minus)
(if (>= (car lst) 0)
(plus-minus-2 (cdr lst) (cons (car lst) plus) minus)
(plus-minus-2 (cdr lst) plus (cons (car lst) minus))))
617:デフォルトの名無しさん
05/10/02 09:38:28
(defun partition (test lis)
(labels ((recur (lis in out)
(cond ((null lis) (values (nreverse in) (nreverse out)))
((funcall test (car lis))
(recur (cdr lis) (cons (car lis) in) out))
(t
(recur (cdr lis) in (cons (car lis) out))))))
(recur lis '() '())))
CL-USER> (partition #'(lambda (x) (>= x 0)) (list 1 -3 0 -2 9 -8))
(1 0 9)
(-3 -2 -8)
618:デフォルトの名無しさん
05/10/02 10:59:40
(defun partition (test list)
(let ((in (cons nil nil)) (out (cons nil nil)))
(let ((i-tail in) (o-tail out))
(dolist (x list (values (cdr in) (cdr out)))
(if (funcall test x)
(setf i-tail (setf (cdr i-tail) (cons x nil)))
(setf o-tail (setf (cdr o-tail) (cons x nil))))))))
619:デフォルトの名無しさん
05/10/02 11:40:15
(defun partition (pred lis)
(do ((lis lis (cdr lis))
(in '())
(out '()))
((null lis) (values (nreverse in) (nreverse out)))
(if (funcall pred (car lis))
(push (car lis) in)
(push (car lis) out))))
620:おしえて厨
05/10/02 23:47:39
clispをwinで使ってるんだけど、lispでウィンドウやダイアログボックスを
だすようなGUI作ることってできないの?できるとしたら
そういう情報はどこにある?
621:デフォルトの名無しさん
05/10/03 00:01:59
>>620
例えば URLリンク(www.wxcl-project.org)
622:デフォルトの名無しさん
05/10/03 01:27:27
できるよ.(621 は試したことないの別のネタで)
自分で Windows の API を呼べばいい.
A) FFI で必要な API をラップする (URLリンク(hocwp.free.fr) とか)
B) Lisp 向けの API を実装したライブラリを作る
ただし,どっちもある程度 C の知識がないと難しいかもね.
Corman Lisp とか AllegroCL や LispWorks といった処理系を使う手もある.
AllegroCL や LispWorks はどっちも GUI ライブラリを持ってるよ.
623:デフォルトの名無しさん
05/10/03 16:43:37
CommonLispにはpartitionがなかったのか…
624:デフォルトの名無しさん
05/10/03 17:56:31
R5RS には remove-if すらないけどね
625:デフォルトの名無しさん
05/10/05 15:05:45
質問です。
(my-reverse '(1 (2 3) (4 (5 6))))
を与えたら(((6 5) 4) (3 2) 1) と、
中身が全て反転するような関数my-reverseを定義するやり方を教えてください。
お願いします。
626:デフォルトの名無しさん
05/10/05 15:14:34
>>625
>>513-525
627:デフォルトの名無しさん
05/10/05 17:33:39
>>626
すいません。>>513-525を読んでもわかりませんでした。。
628:デフォルトの名無しさん
05/10/05 18:07:07
(defun my-reverse (list)
(let ((result '()))
(dolist (x list result)
(if (consp x)
(push (my-reverse x) result)
(push x result)))))
629:デフォルトの名無しさん
05/10/05 19:14:32
>>628
ありがとうございます!!
630:デフォルトの名無しさん
05/10/05 19:43:33
>>525
631:デフォルトの名無しさん
05/10/05 20:30:40
相変わらずレベル低いよな
おまえら普段何してんの?
632:デフォルトの名無しさん
05/10/05 20:35:49
みんな処理系は何使ってんの?
633:デフォルトの名無しさん
05/10/05 23:10:51
Gaucheでネットワークプログラミング
634:デフォルトの名無しさん
05/10/06 01:30:05
CLISP - 日常的な小物スクリプト書き
SBCL - CLISP では力不足な計算用とかスレッド使いたいときとか
CMUCL - 最近使ってない…互換性検証用か
635:631
05/10/06 01:34:37
おまえらレベル低すぎ
俺の使っている処理系を教えてやるから勉強汁
Ruby 1.8.3
ユーザビリティの低いもの使ってんなよ
636:デフォルトの名無しさん
05/10/06 01:51:04
>>634
SBCLってCMUCLよりデバッグやりにくくない?
637:デフォルトの名無しさん
05/10/06 02:14:31
スレッドまわり以外は特にそんな事おもわないけど?
どのへんがやりにくいとおもう?
638:デフォルトの名無しさん
05/10/07 10:11:25
Windowsのアプリに組み込めるLisp、Schemeでいいの無いですかね?
639:デフォルトの名無しさん
05/10/07 14:34:43
ないから俺は自作したが。
640:初心者
05/10/09 00:25:24
(defun plus-minus (lst &optional plus minus &aux (x (first lst)) (xs (rest lst)))
(cond ((null x)
(values plus minus))
((>= x 0)
(print xs)
(plus-minus xs (cons x plus) minus))
(t
(plus-minus xs plus (cons x minus)))))
このコードのxやxsって再帰のたびに更新されていくけど、a
(defun test (lis &aux (a (first lis)) (b (rest lis)))
(if (not (null (first lis)))
(print b)(test b)))
これのaやbは再帰しても更新されないよね・・・違いはなんなの?
再帰後にもずっと同じ値がはいったままだったり、再帰後には再帰後の
更新された値が入ったりするその違いって?
641:デフォルトの名無しさん
05/10/09 01:25:18
(lambda (x y &aux (a form1) (b form2)) ...) は
(lambda (x y) (let* ((a form1) (b form2)) ...)) と同じ。
後半で更新されてないように見えるとしたら、それはちゃんと再帰
してないから。
642:デフォルトの名無しさん
05/10/09 08:45:59
>>640
↓こんな動きになってるのは理解できてるの?
CL-USER> (PLUS-MINUS '(1 -3 2))
0: (PLUS-MINUS (1 -3 2))
x: 1 xs: (-3 2)
1: (PLUS-MINUS (-3 2) (1) NIL)
x: -3 xs: (2)
2: (PLUS-MINUS (2) (1) (-3))
x: 2 xs: ()
3: (PLUS-MINUS NIL (2 1) (-3))
x: () xs: ()
3: PLUS-MINUS returned (2 1) (-3)
2: PLUS-MINUS returned (2 1) (-3)
1: PLUS-MINUS returned (2 1) (-3)
0: PLUS-MINUS returned (2 1) (-3)
CL-USER> (TEST '(NIL NIL 2))
0: (TEST (NIL NIL 2))
a: NIL b: (NIL 2)
1: (TEST (NIL 2))
a: NIL b: (2)
2: (TEST (2))
a: 2 b: ()
NIL
2: TEST returned NIL
1: TEST returned NIL
0: TEST returned NIL
643:& ◆RdmUjfVKqQ
05/10/09 10:34:53
>641, 642
そういう動きになっててほしいけど、
printから出てくる値をみてる感じだと、
2番目のコードだと再帰前のリストのrestとったものがでてるようにみえるんだよ~
644:デフォルトの名無しさん
05/10/09 10:54:00
間違いなくコードが変だからどういう動作を意図してるのか言ってみ。
645:デフォルトの名無しさん
05/10/09 12:53:13
642 は SBCL でのトレース結果だよ.CLISP でも同じだた.
意図したように動いているみたいなんで,
640 が動作させた本当のコードと入力値を述べたまえ.
646:デフォルトの名無しさん
05/10/09 14:08:21
>>640が何を訊きたいのか判らんが、こう書きたかったんじゃないのか?
(defun test (lis &aux (a (first lis)) (b (rest lis)))
(if (not (null (first lis)))
(progn (print b)(test b))))
647:デフォルトの名無しさん
05/10/09 14:40:00
>>646 それでも条件が逆になるけど再帰時にちゃんと lis はあたらしくなるぞ?
思うに,if の条件が意図したやつと逆になっているので期待どうりしていなかっ
たとかそんな事じゃないかな.どーゆう条件でどう動いてほしかったのかを日本語
で説明してもらうのがはやいと思う.
648:おすえて
05/10/09 20:21:16
(defun test (lis &aux (a (first lis)) (b (rest lis)))
(if (not (null (first lis)))
(print b)(test b)))
これが、(test '(1 2 3 4 5))とやったときに
例えば
(2 3 4 5)
(3 4 5)
(4 5)
(5)
みたいにならないのは、なぜ?
649:デフォルトの名無しさん
05/10/09 20:29:11
>>648
なぜそうなると思った?
650:& ◆eDpN.64OYw
05/10/09 20:48:49
(defun plus-minus (lst &optional plus minus &aux (x (first lst)) (xs (rest lst)))
(cond ((null x)
(values plus minus))
((>= x 0)
(print xs)
(plus-minus xs (cons x plus) minus))
(t
(plus-minus xs plus (cons x minus)))))
↑これだと再帰のたびにxsが変わっていくから、468でもそうだろうと
思ったんだけど
651:デフォルトの名無しさん
05/10/09 21:00:36
君のやりたいことは、
(defun test (lis &aux (a (first lis)) (b (rest lis)))
(cond ((not (null b))
(print b)
(test b))))
ってな感じかな。if の定義を再勉強!
652:デフォルトの名無しさん
05/10/09 21:04:56
やっぱりな.再帰とか &aux 以前に 2 つ間違いをおかしている.
1. if の構文を間違えている (おそらく)
2. 条件の中身も間違えている
それって,「条件を満しているなら print で b を表示したあと再帰する」って
処理が希望のようだが,書いたコードが,「もしリストの先頭要素が nil 以外なら表示する.そうでないなら再帰する」
なので,表示は一回しかされない.
(defun test (lst &aux (a (first lst)) (b (rest lst)))
(if a
(progn
(print b)
(test b))))
もしくは
(defun test (lst &aux (a (first lst)) (b (rest lst)))
(when a
(print b)
(test b)))
だな.手元の参考書を if の説明をちゃんと読みなおしたほうがいい.
653:& ◆QWv3R1XL8M
05/10/09 21:14:39
>書いたコードが,「もしリストの先頭要素が nil 以外なら表示する.そうでないなら再帰する」
なので,表示は一回しかされない.
なんで??
再帰二回目だとrestとった値がなんでnilになる???2とか3じゃないの??
ifがどうとか言う以前によくわからんのですが
654:デフォルトの名無しさん
05/10/09 21:23:19
再帰しないんだから二回目もクソもないんだよ。
if の説明を確認しろっていわれてんだから素直にそうしな。
655:& ◆QWv3R1XL8M
05/10/09 21:31:58
なるほど、わかりました。ありがとうございました。
で、
(defun test (lis &aux (a (first lis)) (b (rest lis)))
(cond ((not (null b))
(print b)
(test b))))
↑これ実行できないんですけどこれは何故?
656:デフォルトの名無しさん
05/10/09 21:39:12
全角空白までコピペしちゃっているからだろう.
大した手間でもないだろうから手で入力したまえ.
657:おしえて厨
05/10/10 19:51:08
lispのsort関数を使わないで、
オリジナルの数字リストの昇順または降順ソートプログラムを
書いてみてください。
できれば初心者でもアルゴリズムが分かりやすいような書き方でおながい
658:デフォルトの名無しさん
05/10/10 20:35:14
>>657
やだ
659:デフォルトの名無しさん
05/10/10 20:50:39
xのy乗を求める問題なんだけど、どこか変なところある?
include <stdio.h>
#include <math.h>
main()
{
double x,y,z;
printf("x =");
scanf("%lf",&x);
printf("y =");
scanf("%lf",&y);
z = pow(x ,y);
printf("x\ty = %lf", z);
}
660:デフォルトの名無しさん
05/10/10 20:52:12
頭が変かもしれんな
661:デフォルトの名無しさん
05/10/10 21:05:09
書き込むスレの選択が変
662:デフォルトの名無しさん
05/10/11 04:45:21
>>620
面白い物見つけた。
URLリンク(www.geocities.jp)
Socket 経由で GUI を作ってるっぽいけど、Windows Native でも
似た様なのがあるんじゃないかな。Mac だとこういうのがある。
URLリンク(www.bluem.net)
663:おしえて厨
05/10/11 08:49:23
(defun small (lis)
(cond ((null (rest lis))
lis)
((< (first lis) (first (rest lis)))
(remove (first lis) lis)
(remove (first (rest lis)))
(cons (first lis) lis)
(cons (first (rest lis) lis))
(small lis)
(t (small (rest lis))))))
↑バブルソートしたくて書いてみた。駄目だった。どこが駄目?
664:デフォルトの名無しさん
05/10/11 09:41:52
バブルソートを使うところが駄目。
665:デフォルトの名無しさん
05/10/11 10:13:57
(defun merge-sort (lst)
(let ((len (length lst)))
(cond ((< len 2) lst)
((= len 2)
(let ((x (car lst))
(y (cadr lst)))
(if (< x y) (list x y) (list y x))))
(t
(do ((x (merge-sort (butlast lst (ash len -1))))
(y (merge-sort (last lst (ash len -1))))
(r '()))
((or (null x) (null y))
(nconc (nreverse r) x y))
(push (if (< (car x) (car y)) (pop x) (pop y)) r))))))
666:おしえて厨
05/10/11 17:25:50
(remove 'a 'a)みたいに一文字だとremoveできないじゃん。
どうやって一文字しかないのを消すの?
あと、(a b c (a ((b))))みたいになってるときのbだけを消して、
(a b c (a (( ))))みたいにする方法って、あるの?
667:デフォルトの名無しさん
05/10/11 18:03:53
((lambda (x y)
((lambda (f) (funcall f f y))
(lambda (f y) (typecase y
(list (remove x (mapcar (lambda (y) (funcall f f y)) y)))
(t y)))))
'b '(a b c (a ((b)))))
=> (A C (A (NIL)))
668:おしえて厨
05/10/11 19:06:51
関数が定義されていません: typecase
669:デフォルトの名無しさん
05/10/11 19:36:09
そりゃ Common Lisp じゃないな。スレ違いだからもうこのスレに来ないように。
670:デフォルトの名無しさん
05/10/11 19:37:20
>>668
処理系がまがい物だな
671:デフォルトの名無しさん
05/10/11 20:10:17
xyzzy だな
672:おしえて厨
05/10/11 20:43:06
xyzzyなんだけど、typecaseつかわずにできないの???
673:デフォルトの名無しさん
05/10/11 21:12:30
>>672
xyzzy使いのよしみで回答しておくけど、
CommonLisp を勉強するのに xyzzy を処理系として使っちゃダメ。
xyzzy でマクロを書くための勉強ならここで質問するのは間違い。
((lambda (x y)
((lambda (f) (funcall f f y))
(lambda (f y) (if (listp y)
(remove x (mapcar (lambda (y) (funcall f f y)) y))
y))))
'b '(a b c (a ((b)))))
=>(a c (a (nil)))
674:おしえて厨
05/10/11 21:57:05
(defun del-atom (n lis)
(cond ((null lis)
nil)
((atom (first lis))
(cond ((eql n (first lis))
(del-atom n (rest lis)))
(t (cons (first lis) (del-atom n (rest lis))))))
((listp (first lis))
(cond ((listp (first (first (first lis))))
(cond ((eql n (first (first (first lis)))))
(del-atom n (rest lis)))
(t (cons (first lis) (del-atom n (rest lis))))))
(cond ((listp n (first (first lis)))
(cond ((eql n (first (first lis)))
(del-atom n (rest lis))))
(t (cons (first lis) (del-atom n (rest lis)))))))))
↑自分でもやってみようとしたら、こんなんなっちゃったよ~~~~
どこが駄目???
675:デフォルトの名無しさん
05/10/12 00:50:11
((listp (first lis))
(cons (del-atom n (first lis)) (del-atom n (rest lis))))
676:デフォルトの名無しさん
05/10/12 00:51:18
first とか rest って使われてるんだなぁとそちらのほうに感動してたりする俺。
677:デフォルトの名無しさん
05/10/12 17:12:58
>>676
それはね、「xyzzy Lisp Programming」のページで、first と rest を推奨す
る、と書かれているからだよ。
URLリンク(www.geocities.jp)
678:デフォルトの名無しさん
05/10/12 17:23:12
>>677
「first と rest を使うことが推奨されています」なんて書いてるが、「誰が」推奨
しているのか不明だな。少なくとも CLtL2 にも ANSI にもそんな記述は見あた
らないが。(もし見落としてたら教えてくれ)
679:おしえて厨
05/10/12 17:33:11
P.H.ウィンストンという人が書いた緑の本に推奨されていた。
まあそれはさておき675さんの指摘がよくわかりません。
どこを直せばいいの??
680:デフォルトの名無しさん
05/10/12 18:08:58
>>679
> どこを直せばいいの??
頭の中身。
お前さんは九九も覚えてないのに数学の問題を見てわからないとわめいてるの
と同じなので、677 が紹介してるサイトの Common Lisp 入門を全部読んで
理解してからもう一度いらっしゃい。
681:デフォルトの名無しさん
05/10/14 03:51:47
ウィンストンって培風館の奴か?
car,cdrの方が好き
ハード寄りで
682:デフォルトの名無しさん
05/10/14 11:14:21
>>681
いつの時代の方ですか?
683:デフォルトの名無しさん
05/10/14 12:23:03
平成17年
684:デフォルトの名無しさん
05/10/14 12:27:20
漏れも car cdr のほうが好きだが、さすがに IBM 7090 (だっけか)は使ったことない。
685:デフォルトの名無しさん
05/10/14 14:01:44
8月からLisp触り始めた超初心者だけど
car、cdrのほうが好きだな。
686:デフォルトの名無しさん
05/10/14 17:17:44
>>679,681
俺もその本持ってる。そのせいか first、rest 派。
自分では使わないから、car や cdr ならともかく caddr ぐらいでもわけわからん。
687:デフォルトの名無しさん
05/10/14 17:23:31
>>686
caddr と third とどっちがわかりやすいかだわな。
個人的には視覚的にわかる caddr のほうが好き。
688:デフォルトの名無しさん
05/10/14 22:48:16
nthは邪道ですか、そうですか
いや、俺も使わないけど
689:デフォルトの名無しさん
05/10/15 14:56:32
(nth 3 L) ≡ (fourth L) なのがなんとも
690:デフォルトの名無しさん
05/10/15 15:05:25
>>689
nth は aref とともに elt の特別版ということだな。
むしろ、この3つの中で nth だけ引数順が違うのが気になる。
691:デフォルトの名無しさん
05/10/16 18:18:47
ルプラカ ルプラクドゥ
パンプルピンプルパムポップン
カッドゥルゥァー
クックドゥー
692:デフォルトの名無しさん
05/10/18 22:37:29
オブラディ オブラダ
(・∀・)スンスンスーン
693:デフォルトの名無しさん
05/10/19 19:16:22
;;ある基点となるフォルダより下のフォルダのフルパスを全て取得するには再帰でどう書けばいいですか?
694:デフォルトの名無しさん
05/10/19 20:40:03
実装依存
695:デフォルトの名無しさん
05/10/19 20:42:51
xyzzyでは??
696:デフォルトの名無しさん
05/10/19 20:45:20
板違い
697:デフォルトの名無しさん
05/10/19 20:55:26
(directory PATHNAME) あたりで調べると良いかも。
698:デフォルトの名無しさん
05/10/21 00:53:04
ECL使って実現されているプロジェクトでそこそこの規模のやつって誰か知りません?
C/C++とCommon Lispを混ぜた開発したいんだけども、実際の使われ方を見て勉強した方が
理解が早いかなと思って。
それともUFFI使うのが定説ですかね。
699:デフォルトの名無しさん
05/10/21 01:37:09
どうなんだろう.最近は CFFI とかも出てきてるしねぇ.
まず Lisp 側のインターフェースを決めて,それが十分に抽象化できていれば
その下は UFFI だろうが処理系の FFI だろうがたぶん問題ない.
ECL はあんまり触ったことないので本題には答えられない.スマソ.
キーワードハイライトつきのエディタ作ったとか Planet Lisp に出てたような.
700:698
05/10/21 01:58:32
>> 699
ありがと。Planet Lisp行ってきます。
スレ違いって怒られるかも知れないけど、Gaucheとかだと結構事情が違ったりする?
確か開発目標に他の言語と仲良くするってのがあったような。でも最終的には
ネイティブコードで走らせたいんだよなぁ・・・
701:デフォルトの名無しさん
05/10/21 02:08:50
ネイティブコードってことは性能が欲しいの?
それでフリーなのがいいならCMUCLやSBCLがいいんじゃないかな。
Cの呼び出しやCからのコールバックもそれほど面倒じゃないし。
702:698
05/10/21 02:45:04
Planet Lisp行ってきました。
簡単なアナウンスだけ出ててsourceforgeに誘導されてみたらスクリーンショットも
公開されてました。CVS HEADにコードが入っているみたいなのでこれから調査します。
いまはプロトタイピングの段階なので実現可能性の検証が主体です。アルゴリズムの設計と
検証はLispであ~でもないこ~でもないやりながら考えた方がお手軽なのですが
プロジェクトの他のメンバがC/C++でコード書いてるので現状は
・Lispでアルゴリズム練る → C++で等価なコードを書いてリポジトリにチェックイン
してます。二度手間でアホらしいんですが最初からC++であれこれ書けないんですよ。
C++の汚さに辟易して大分昔に標準化の動向追いかけるのやめていたこともあって。
で、どうせならLispのコードそのままC/C++に埋め込んじゃうことはできないのかな~と
たくらんでいるところです。
スレ違いになりますが最近STLやらBoostやらLokiやら勉強してみて驚愕しました。
何であんな大変な思いをしてまでC++使うんですかね・・・不思議でたまらん。
703:デフォルトの名無しさん
05/10/21 02:54:10
>>702
ずいぶんと怪奇なことになってるよね。>C++
でも、すべてインラインに開いちゃうから確かに速い。
そのかわりコードサイズが大爆発。w
704:デフォルトの名無しさん
05/10/25 00:24:33
今ポールグラハムのlisp本でお勉強中なのですが、lispでは
soketを開くとかプロセス制御するとか低レイヤな処理をする場合
どーすんのでしょうか。処理系にそうしたライブラリがなかったりする場合は?
705:デフォルトの名無しさん
05/10/25 00:34:49
socketです。typoっす。すんません。
706:デフォルトの名無しさん
05/10/25 01:12:37
>>704
どうにもなりません。そういうライブラリが存在するか、ネイティブコードを
呼ぶなどの方法でなんとかできる処理系を選びましょう。
707:704
05/10/25 01:53:21
>>706
むぅ。そういうもんなんですか。教えて頂いて有難うございます。
そういったことは一旦置いておくとすると、学習向けに
オススメの処理系があればご教授頂けると助かります。
今のところ本読んでるだけなのですが手続き型が染み付いた頭には
関数プログラミングって難しい…。
708:デフォルトの名無しさん
05/10/25 02:04:53
>>707
WindowsならCLISP、UNIX系ならSBCLがいいんじゃないかな。
どちらもソケットなどの拡張機能は持っているよ。
709:704
05/10/25 02:12:34
>>708
どもです。SBCLっての調べてみます。。
710:デフォルトの名無しさん
05/10/28 00:10:41
潜水艦から発射するミサイルじゃないの?
711:デフォルトの名無しさん
05/10/28 00:15:22
>>710
それはSLBM
712:デフォルトの名無しさん
05/10/28 01:26:06
コンパイラ・スクリプトエンジン相談スレで言語処理系の実装にLispを使うべきだ風な
書き込みを見掛けて興味を持ったのですが、具体的にLispで記述されたコンパイラとかで
参考になりそうなものがあれば教えていただけますか?ソースを見てどんな利点があるのか
比較してみたいです。大昔GCCのソースを眺めたとき内部でS式みたいので木を表現して
いたみたいでしたが、表現形式だけじゃなくて実際に内部でLispプログラムが動いてたり
するんだろか。
713:デフォルトの名無しさん
05/10/28 03:53:37
かつては MacLisp が Fortran と張り合っていたわけだし,今でも Lisp コン
パイラはほとんど Lisp で書かれているよ.ただ,Lisp 製の ML や C コンパ
イラとかもあるけど,入門で読むのは無理だろう.
利点としてはコンパイラを書く時にモロに Lisp コンパイラの機能がつかえる!!
といっても,何の事か Lisp を知らなければまったくイメージできないかもしれない.
だからまず Lisp を学ぶ必要があるとおもうよ.基礎を一通りやったあと,
URLリンク(groups.google.com)
とか見て,それでもメリットがわからないようなら Lisp の事は忘れたほうが
いい.合う合わないがあるからね.
714:デフォルトの名無しさん
05/10/28 20:14:18
MacLispか…研究室の物置に5”FDの認知心理のプログラム群があったなぁ
715:デフォルトの名無しさん
05/10/30 01:11:05
lispと他のプログラムとの構文とかの対比表ってありませんか?
716:デフォルトの名無しさん
05/10/30 03:33:47
MacLisp か…今やプロジェクト Mac の Lisp で Macintosh とは関係ないと
言わないと通じない時代かもしれんな…
717:デフォルトの名無しさん
05/10/30 06:51:32
URLリンク(kasamatusan.sakura.ne.jp)
(竹内)
718:デフォルトの名無しさん
05/10/30 11:34:43
>>715 他のプログラム言語,と言いたいのか?具体的には何よ?
719:デフォルトの名無しさん
05/10/30 14:47:52
>>718
C,C++,java,perl,ruby,python,PHPなどのメジャーな手続き型のどれか
720:デフォルトの名無しさん
05/10/30 16:39:07
>>719
Lisp プログラマのための Python 入門
URLリンク(www.unixuser.org)
こんな感じ?
721:719
05/10/30 16:54:13
>>720
thx!
722:デフォルトの名無しさん
05/10/30 19:46:03
>>716
Windows上で動く?
723:デフォルトの名無しさん
05/10/30 19:47:42
lispとjavascriptってどっちが優れていますか?
724:デフォルトの名無しさん
05/10/30 19:50:17
>>722
PDP-10 とか DEC System 20xx のエミュがあれば。
725:デフォルトの名無しさん
05/10/30 19:57:22
>>723
javascript は lisp です
726:デフォルトの名無しさん
05/10/30 23:48:45
煽りにもマジレスしておこうか.
Web のクライアントサイドスクリプティングなら圧倒的に JavaScript が優れている.
逆にサーバーサイドでの処理なら Lisp のほうが良いな.でも君が病的に括弧
を恐れているならどこでも JavaScript のほうが優れていると感じるだろう.
基準をしめさない場合,「どちらが優れていか?」というのは主観的な問題だ
から,人に聞いてもあまり意味がないよ.
727:デフォルトの名無しさん
05/10/31 03:19:26
>lispと他のプログラムとの構文とかの
728:デフォルトの名無しさん
05/11/01 00:04:26
>>716 Maclisp と綴って欲しい
729:デフォルトの名無しさん
05/11/01 06:11:42
Win32バイナリが吐けるLispコンパイラはどこですか?
730:デフォルトの名無しさん
05/11/01 07:05:14
>>726
主観なわけねーじゃん。ばっかじゃないの
731:デフォルトの名無しさん
05/11/01 10:46:25
>>730
基準をしめさない場合、という条件でどこをどうやったら主観じゃなくなるのだ?
732:デフォルトの名無しさん
05/11/01 11:35:21
>>730の次のレスは「あまりの恥ずかしさに煽って逃げる」これ。
733:デフォルトの名無しさん
05/11/01 12:11:48
>>729
コーマンリスプなんてどうだ。
URLリンク(www.cormanlisp.com)
734:デフォルトの名無しさん
05/11/01 12:54:47
非商用なら無料なんだ。
corman はチェックしてなかったな。結構寛容なライセンスだね。
735:デフォルトの名無しさん
05/11/01 13:34:49
どうせポップアップウィンドウに
t
とか表示させるだけだろ
736:デフォルトの名無しさん
05/11/02 00:11:24
ロジャーコーマンは腹出過ぎ。
737:デフォルトの名無しさん
05/11/02 00:30:12
Corman Lispって日本語通るようになったのかな?
要望あったら聞くよーてなメールも送ってきたくらい個人商店ぽいので
誰か日本で使い物になるなら買うから是非頼むといってやれば
なんとかしてくれるかも。
738:デフォルトの名無しさん
05/11/02 00:31:55
[CommonLisp とコンパイル - コンパイラスクリプトスレからの続き]
つまり Lisp においては「x に 2 を倍する」プログラムはデータ構造 (* x 2) と表現できるわけだ.
(もし熱烈な C/C++ & XML ファンならこの構文木をつくってよう)
さて,ここで操作する.もし「x に 2 を足す」にしたいと思ったとする.
これは Lisp では (+ x 2) と表現できる.インタプリタ上ならば
> code
(* x 2)
> (setf (car code) '+)
(+ x 2)
となる.(もし熱烈な C/C++ & XML ファンなら,同様の操作を表現してみよう )
さて,これをコンパイルしてみよう.このとき,コードは引数 x を一個とるわけなので関数で
ラップする.これは (lambda (x) (+ x 2)) と書ける.Common Lisp の compile メソッドを使うと
> (compile nil '(lambda (x) (+ x 2)))
#<compiled-function>
これでコンパイルされたコードが得られる.もしネイティブコードコンパイラ
を使っているならネイティブコードが得られる.確認したければ,すかさず
> (disassmble *)
とうてばよい.このようにコンパイラは Lisp 環境と統合されており,利用者が気軽に使える存在なのである.
(もし熱烈な C/C++ & XML ファンなら,表現した構文木をコンパイルしてからディスアセンブルしてみよう)
739:デフォルトの名無しさん
05/11/02 02:59:33
C で同じことやりたいなら cc -fpic 実行して dlopen するだけじゃない?
KCL 系だってそうやってんだし。
740:デフォルトの名無しさん
05/11/03 13:38:27
コンパイラスレのからの客人?でも KCL とかっていうことはこのスレの人かな?
まぁ,Lisp では手軽さがケタ違いです.C を直接さわったら操作するたびに,
C のソース <--> データ構造 を変換しなきゃいけないのですが,逆に S 式な
ら変換する必要はない.
まぁ,どうしてもと言うなら C っぽく入力列 (S 式風味) をパースしてコンパ
イル,実行という手順でもいい.例として forth 風味の言語を考えよう.
def double
2 *
end
def quad
double double
end
def fib
dup 1 > if
dup 1 - fib swap 2 - fib +
end
end
reset
5 quad fib print
これでフィボナッチ数列の 20 番目を表示したいとする.大袈裟に言うと,
たとえば gcc のバックエンドにこの言語のフロントエンドを作るという事になる.
これは手軽か?(まぁ,手間以外の難易度は Lisp だろうとなんだろうと簡単なんだけど…)
741:デフォルトの名無しさん
05/11/03 13:41:51
まずパッケージと,基本オペレータを準備する.まぁ,とりあえずスタックはリストで
表現し,スタックのクリア,表示,スタックトップの入れ替え,コピーという基本操作を
使う.算術演算子も lisp のやつを流用する.と,オペレータの定義はこうなる.
(defpackage :mini-forth (:use :cl) (:export #:parse #:run #:forth) (:shadow #:print #:pop #:push #:+ #:- #:* #:/ #:> #:< #:= #:>= #:<=))
(in-package :mini-forth)
(defparameter *stack* nil)
(defmacro defword (word args &body body)
(let ((binds (loop for v in args collect (list v '(cl:pop *stack*)))))
`(defun ,word () (let* ,binds ,@body))))
(defmacro default-operators (&rest operators)
`(progn
,@(loop for op in operators
collect `(defword ,op (x y) (cl:push (,(intern (symbol-name op) :common-lisp) y x) *stack*)))))
(defword print () (loop for e in *stack* for i from 0 do (format t "~&~4D: ~A~%" i e)))
(defword reset () (setf *stack* nil))
(defword swap (x y) (cl:push x *stack*) (cl:push y *stack*))
(defword dup (x) (cl:push x *stack*) (cl:push x *stack*))
(default-operators + - * / > < = >= <=)
742:デフォルトの名無しさん
05/11/03 13:43:17
あとは入力をパース(手抜き)する.
(defun parse (program &optional (ast nil) &aux (word (first program)))
(cond ((or (null program) (eq word 'end) (eq word 'else))
(values (nreverse ast) program))
((or (stringp word) (numberp word))
(parse (cdr program) (cons `(cl:push ,word *stack*) ast)))
((eq word 'if)
(multiple-value-bind (tree next)
(parse (cdr program))
(multiple-value-bind (tree2 next2)
(parse (if (eq (car next) 'else) (cdr next) next))
(parse (cdr next2) (cons `(if (cl:pop *stack*) (progn ,@tree) (progn ,@tree2)) ast)))))
((eq word 'def)
(multiple-value-bind (tree next)
(parse (cddr program))
(parse (cdr next) (cons `(defword ,(cadr program) () ,@tree) ast))))
(t (parse (cdr program) (cons `(,word) ast)))))
で,得られた S 式をコンパイル(Lisp コンパイラを流用)して実行.
(defun run (program)
(let ((tree (cons 'progn (parse program))))
(funcall (compile nil `(lambda () ,tree)))))
743:デフォルトの名無しさん
05/11/03 13:51:52
この forth もどきにさっきのプログラムを喰わせる.
MINI-FORTH> (run '( [さっきのプログラム] ))
0: 6765
計算できたッ!! ついでにこの簡易言語で定義された関数 fib とかはLisp コン
パイラでコンパイルされている.つまりネイティブコードコンパイラを使って
いればネイティブコードが得られる.
MINI-FORTH> (disassemble 'fib)
; 09AB6F66: 8BD4 MOV EDX, ESP ; no-arg-parsing entry point
; 6F68: 83EC0C SUB ESP, 12
; 6F6B: 8B05886DAB09 MOV EAX, [#x9AB6D88] ; #<FDEFINITION object for DUP>
; 6F71: 31C9 XOR ECX, ECX
; 6F73: 896AFC MOV [EDX-4], EBP
; 6F76: 8BEA MOV EBP, EDX
; 6F78: FF5005 CALL DWORD PTR [EAX+5]
; 6F7B: 8BE3 MOV ESP, EBX
[...]
…というような説明でどうかな?
744:デフォルトの名無しさん
05/11/04 01:46:00
む、つまりこれはforthのトランスレータ?
結構短く書けるもんだね。
ところで↓のスレとここはどう使い分けてるの?
スレタイ同じだから混乱するぜ。
【一日】CommonLisp【一門】
スレリンク(tech板)
745:デフォルトの名無しさん
05/11/04 02:05:48
スレタイが違うので混乱はしない。
746:デフォルトの名無しさん
05/11/04 04:54:18
>>744 宣伝乙
747:デフォルトの名無しさん
05/11/08 00:07:54
すいませんが、解の公式を使って二次方程式の解を出す関数の定義の仕方を
教えてください。どうも、±がどう表現していいか分からなくて…。
よろしくお願いします。
748:デフォルトの名無しさん
05/11/08 00:09:53
↑宿題?
749:デフォルトの名無しさん
05/11/08 00:13:37
たぶん。
>>747
> ±がどう表現していいか
思考様式の変革が必要だと思う
750:デフォルトの名無しさん
05/11/08 00:27:29
多値で返すとか、リストで返すとか好きなやり方選べばいいんでないの。
751:デフォルトの名無しさん
05/11/08 00:30:53
つうかやる気ねーんだろ?授業をちゃんと聞いてなかったみたいだし。「
いつも思うんだけどなんで~日までの宿題ですやる気ないんで教えてください、
って素直に言えないのかね?まさか宿題である事を隠してるつもりなのか?なら
人をナメすぎだな。ほらこれを提出してごらん。俺は親切だから罠をしかけたりしないよ。
(defun solve (a b c)
"ax^2 + bx + c = 0"
(let ((A (- b))
(B (sqrt (- (* b b) (* 4 a c))))
(C (* 2 a)))
(values
(/ (+ A B) C)
(/ (- A B) C))))
752:デフォルトの名無しさん
05/11/08 00:39:19
漏れのエスパー能力によると>>747が求めているプログラムは Lispではないな。
753:デフォルトの名無しさん
05/11/08 00:41:43
>>750
±にあたるものが存在してないのが問題の山なのかも。
存在してても使いにくそうだけど。
754:デフォルトの名無しさん
05/11/08 05:01:13
そういえば複素数も扱えるんだよな
でも>>751はaが非零でないことくらいはチェックした方がいいと思う
755:747
05/11/08 22:31:36
どうもどうも。おかげさまで解決しました。
視点を変えました。>>751のプログラムもある意味参考にさせていただきました。
756:デフォルトの名無しさん
05/11/08 22:55:05
>>755
変数名変えた程度で提出してそうだな.
757:デフォルトの名無しさん
05/11/09 10:52:42
数年前からWIREDで学生のレポートのコピーと教授のいたちごっこが記事になっ
たりとかしてるけど、いっこうに解決してないよな、この問題。
数ヶ月か一年おきくらいの間隔で問題にした記事を見てる気もする。
Comm. ACMの先月号でも Academic Dishonesty and the Internet つって
とりあげてるし。なんでもclass project(宿題というよりはレポートに相当か)
を外注に出す奴までいたそうだ。何のために大学に来たのかと小一時間(ry
そういう学生のイカサマは許さんと頑張ってくれる教官は日本の大学にも
いるんだろうか。なんかそんなやつ放っとけ面倒だと知らんぷりになりそうなんだが。
758:デフォルトの名無しさん
05/11/09 10:58:03
今後の(学内or社会人)人生で困るならその程度だし困らないならそれもまたその程度。
759:デフォルトの名無しさん
05/11/09 11:26:00
企業活動もアウトソーシングに頼る時代なんだから別にいいんじゃない?
卒論だって金でやってもらえる時代ですよ。
教官だって普段の学生の様子を見てれば、まじめにやってるやつと
金で解決したやつの違いくらいわかるでしょ。わからなかったり、
わかっても注意しなかったら、その程度の教官ってこと。
でも>>747はこんなとこで聞く前に、教官に質問しろ。
払った授業料以上のものを貰わないともったいないぞ。
質問しても答えてもらえなかったらダメな先生に当たったと諦めろ。
760:デフォルトの名無しさん
05/11/09 11:36:09
教官としてはどうでもいいんだが。精査したり注意してやる義理もない。
761:デフォルトの名無しさん
05/11/09 11:47:02
無駄なレポート書く暇あったら自分の勉強したいよ
762:デフォルトの名無しさん
05/11/09 11:50:21
どうでもいいならレポートや宿題なんて出さないで欲しいよな。
763:デフォルトの名無しさん
05/11/09 12:01:17
>>762
君たちにとって無駄でどうでもいいのなら提出しなければいい。
764:デフォルトの名無しさん
05/11/09 12:03:45
単位を貰うために、最小限の労力とリスクで、レポートを仕上げる
765:デフォルトの名無しさん
05/11/09 12:30:01
単位をもらうためならそれでいいよな。
単位に値しないなら労力を割かないほうがよい。
単位取得を重要視するなら学生側でそれくらいのマネジメントくらいしろ。
766:デフォルトの名無しさん
05/11/09 12:33:44
やっぱ宿題には黙って答えだけだな。
余計な事言うから >>757-765 のような板違い連中を釣り上げちゃう。
767:デフォルトの名無しさん
05/11/09 20:47:57
自分の望むレスだけしか見たくないんですか?
答えだけ欲しければ宿題スレへいけ。
768:デフォルトの名無しさん
05/11/09 21:07:39
じゃあ教授と学生のいたちごっこを見事な再帰で表現>>768
769:デフォルトの名無しさん
05/11/09 21:51:43
うちの研究室、プログラムの類似度判定やってた。
教授が集めてきた学生たちのレポートを実験の対象にしてた。
結果、年度・言語に関わらず、2~3の大きいグループができると判明した。
770:デフォルトの名無しさん
05/11/13 01:34:50
以下のようなことを実行するにはどうすればいいのでしょうか?
(setf a '(+ 1 2))
(setf b '(+ 3 4))
(setf c '(- b a))
(myfunc c)
4
あるリストファイルを読んで内部にツリー構造をつくり、
それを一気に実行することを望んでいます。
具体的には、内部で以下のように展開してから実行したいと
思っています。
(eval '(+ (+ 1 2) (+ 3 4)))
何かヒントだけでも頂けたら嬉しいです。どうぞよろしくお願い致します。
m(_ _)m
771:デフォルトの名無しさん
05/11/13 01:58:53
>>770
こんなんでどうだ。
(defun expand (x)
(cond ((symbolp x) (expand (symbol-value x)))
((numberp x) x)
((listp x) (cons (car x) (mapcar #'expand (cdr x))))
(t (error "unknown type: " x))))
(defun myfunc (x) (eval (expand x)))
772:デフォルトの名無しさん
05/11/13 02:45:02
変った宿題だな。とりあえず読み込みたいリストファイルの例を示して。
それによって難易度が違うんで。
(+ 1 2)
なのか
(setf a '(+ 1 2))
なのか。使う関数は +, *, -, / なのか Lisp のフル機能の使うのか,など。
773:770
05/11/13 12:58:24
>>771
ご回答ありがとうございます。m(_ _)m
採用させていただきます。
初心者のくせに変にマクロに拘ってハマってました・・・
>>772
自主制作ソフトに必要な機能なんです。(趣味です)
リストですが・・・
vA_out 1
vB_out 2
vC_out 3
vD_out 4
fPlus1_in vA_out
fPlus1_in vB_out
fPlus1_out fMinus1_in1
fPlus2_in vC_out
fPlus2_in vD_out
fPlus2_out fMinus1_in2
fMinus1_in1 fPlus1_out
fMinus1_in2 fPlus2_out
fMinus1_out retrun
を予定してます。ちょっと冗長ですが・・・。
関数は将来的に増える予定です。Lispのフル機能を使っていきたいと思います。
774:770つづき
05/11/13 13:03:05
>>773のリストを読み込んで、内部で>>770のようなツリーを組み立て
最後に実行して答えを返す予定です。
>>772
問題にご興味を持っていただきありがとうございました。
もし宜しければ、ヒントなど頂けたらと思います。
775:デフォルトの名無しさん
05/11/13 13:54:45
なるほど S 式じゃないプログラムリストって意味だったのか。
このプログラムの動作はどんな動きをするんかな?
今はこのファイルを Lisp のリスト形式 (S式) に手動で変換してるんだよね?
たとえばプログラム言語としての機能を持たせたいなら(条件分岐とか)
>>740 からのレスが参考になるかもしれないし、このリストをもう少し S 式風
にカスタマイズできるなら read 系の関数を使って字句解析を省略できる。
776:770
05/11/14 20:37:38
>>775
実はあるプログラム言語をパクろうと思ってます。(^^;
もちろん、自分なりの発展はさせるつもりですが。
>今はこのファイルを Lisp のリスト形式 (S式) に手動で変換してるんだよね?
そうです。
>たとえばプログラム言語としての機能を持たせたいなら(条件分岐とか)
>>>740 からのレスが参考になるかもしれないし、このリストをもう少し S 式風
早速参照してみます。
>にカスタマイズできるなら read 系の関数を使って字句解析を省略できる。
あまり複雑なS式はむりですが、出力の形式を弄る程度でできるS式には
しようと思ってます。
(setf vA 1) ←この程度ですが・・・(^^;
また、質問させていただくかもしれません。今回はアドバイスありがとうございました。
777:デフォルトの名無しさん
05/11/15 17:38:38
770 とは別人なのですがついでに聞かせて下さい。
Lisp コードの中にいわゆる普通の infix の数式を入れて書きたいと思ったら
どういう手が考えられるでしょうか。
つまりこんな感じで出来ればいいんですけど
(defun f (x y) ( + 1 y %%% x^2+y^3 %%% ))
プリプロセッサを通すとかじゃなくてやろうと思ったらどうしますか。
778:デフォルトの名無しさん
05/11/15 17:57:12
つ URLリンク(groups.google.com)
つ URLリンク(groups.google.com)
779:777
05/11/15 18:22:40
本当にありがとう。やっぱ reader macro で出来るんですね。使います。
780:デフォルトの名無しさん
05/11/15 23:08:40
使うのかよ!
781:デフォルトの名無しさん
05/11/16 12:42:27
reader macroのわかりやすい解説ってないでしょうか?
782:デフォルトの名無しさん
05/11/16 13:11:18
>>781
なんだかんだ言って CLtL2 が一番わかりやすかった。w
783:デフォルトの名無しさん
05/12/06 16:53:20
規格書は紙で持っとくと、初心者レベルの時でも結構役に立つよ。
ansiの店で$18で売ってます。
784:デフォルトの名無しさん
05/12/07 10:30:59
本スレのCLOSの話題について行けないバカな漏れに
MOPのなんたるかから教えて下さい。
785:デフォルトの名無しさん
05/12/07 13:04:06
>>784
AMOP読め。または図書館へ行って昔のbit別冊を探せ。
786:デフォルトの名無しさん
05/12/07 19:49:24
AMOPって今でも、新刊買えますか?
TinyCLOSは、いじってて面白かったなぁ。またいじりたいなぁ。
Kiczalesは、Aspect orientedなる概念を提唱して、ずぅーっと
遥か彼方まで行ってしまったね。
Kiczalesのアイディアを具体化しようとしている連中は、なぜか
Java、Rubyにご執心みたいだけど。
787:デフォルトの名無しさん
05/12/07 20:12:37
>>786
買えるよ。日本アマゾンは3~5週間だが、USアマゾンなら24時間以内発送。
URLリンク(www.amazon.co.jp)
URLリンク(www.amazon.com)
788:デフォルトの名無しさん
05/12/07 20:15:14
On Lisp邦訳の次はAMOP邦訳に挑戦して頂きたい。>野田さん
789:デフォルトの名無しさん
05/12/07 22:00:57
翻訳終わる頃には、ネタとして終わってる悪寒。
最先端とはいわないまでも、半分より前、できるなら先頭グループ
を走りたいなら、原著は避けられないと思うよ。
まぁ、かくいう俺も日本語と英語しかわからないのだけどな。
790:デフォルトの名無しさん
05/12/07 22:42:59
先頭グループもなにも、MOPやCLOSはかなり前からあるんじゃないの?
791:デフォルトの名無しさん
05/12/08 02:30:22
>>786
そうか? AMOP からさほど進化したとは思えないんだが…
792:デフォルトの名無しさん
05/12/14 23:14:08
clisp上でMAXIMA使いたいんですが解説サイトとかありませんか?
最新版に対応しているところが見つからないんですが
793:デフォルトの名無しさん
05/12/20 01:46:09
climacs に期待...
794:デフォルトの名無しさん
05/12/20 19:14:13
Schemacsとか作る奴はおらんのか?
795:デフォルトの名無しさん
05/12/20 23:38:21
climacs は SBCL ありきだからなぁ。Scheme で Native Thread が使えて
ネイティブコンパイラな実装があれば話は別だが。
796:デフォルトの名無しさん
05/12/21 00:26:33
climacsも概ね動くようになったところで飽きて放置に100りちゃーど
797:デフォルトの名無しさん
05/12/21 07:51:11
>>794
ngscmというものならある。
798:デフォルトの名無しさん
05/12/23 05:33:14
シンボルを全部日本語にして日本語Lispとして売り出す(笑)
799:デフォルトの名無しさん
05/12/23 07:25:40
>>798
日本語Lispなら、S式はリストの先頭でなく末尾を関数とみなすようにしないと。
800:デフォルトの名無しさん
05/12/23 09:57:03
(甲 3 とする)
(乙 5 とする)
(甲 乙 対にする) => (3 . 5)
((甲 2 加える) 乙 乗ずる) => 25
助詞が欲しいな。
801:デフォルトの名無しさん
05/12/23 10:13:37
もともとのLispも英文にはなってないんだから、
日本語Lispといっても別に、その辺まですり合わせなくていいんじゃないかな。
802:デフォルトの名無しさん
05/12/23 13:05:23
>>799-800
括弧を取ればそのままFORTHになるという利点(?)があるな。
803:デフォルトの名無しさん
05/12/23 13:54:53
それだったら最初から Forth の方が。
つまり GikoForth なわけですが。
804:デフォルトの名無しさん
05/12/23 19:59:15
(おぼえる かいじょう (い)
「0から い までかけあわせる」
(もしも (ぜろか い)
1
(かける い (かいじょう (いちひく い)))))
805:デフォルトの名無しさん
05/12/23 20:28:09
(いれる ●にわとり 「こけこっこー」)
(いれる ●ねこ 「にゃぁにゃぁ」)
(いれる ●ぶた 「ぶーぶー」)
(みる ●にわとり)
→ こけこっこー
806:デフォルトの名無しさん
05/12/24 01:10:35
SBCL の Win32 ポートがいよいよマージされるみたいだな。
URLリンク(sourceforge.net)
;; Macho のアーカイブ止まっちゃったのか。
807:デフォルトの名無しさん
05/12/26 22:08:00
>>805
carとかcdrとかcdadarとかはどうやって表現するんだ。
808:デフォルトの名無しさん
05/12/27 01:04:54
car ⇒ 住所登録所の内容
cdr ⇒ 値登録所の内容
cdadar ⇒ 住所の値の住所の値登録所の内容
809:デフォルトの名無しさん
05/12/27 01:47:02
car => これ
cdr => それ
cdadar => そこそこれ
810:デフォルトの名無しさん
05/12/27 01:55:43
car/cdr は箱(コンスセル)から要素を取り出す操作だから、
car: とりだす
cdr: つぎをとりだす
cdadar: つぎのまえのつぎのまえをとりだす
関数は動詞且つ和語で統一したい所だけど、苦しいかな...
811:デフォルトの名無しさん
05/12/27 02:26:21
>>809
それイイネ
812:デフォルトの名無しさん
05/12/27 10:26:20
>>809
anaphoric ifのitはどうすんだ
813:デフォルトの名無しさん
05/12/27 11:57:15
>>812
「あれ」
814:デフォルトの名無しさん
05/12/30 19:42:32
URLリンク(clozure.com)
x86 の文字がちらほら見えるけど、OpenMCL も x86 に移植されるみたいだね。
素晴らしい。
815:デフォルトの名無しさん
06/01/09 22:24:16
lispで作った関数なんかは、何処に保存されてるのでしょうか?
lispのコードをいじる課題が出たのですが、
コードの保存を自分でやらなきゃならなくなって困ってます。
816:デフォルトの名無しさん
06/01/09 22:52:09
教官に聞け
817:デフォルトの名無しさん
06/01/09 22:59:50
それを見つけるのが課題。。
818:デフォルトの名無しさん
06/01/10 10:08:05
「エディタで新規にファイル作ってその中に書け」が答のような気もする
っていうかLisp関係ないな
対話的にしかLispを使わない授業だったと推測するが
819:デフォルトの名無しさん
06/01/10 14:24:33
>>815
それ、Smalltalk使いの私も訊きたいです。
Smalltalkでは、関数(メソッド)が自身のソースを属性として持っていて比較的
容易にたぐれるんですが、Lispでは環境内でのソース管理はどうなっているんでしょうか?
818の行間を読むと、対話的に作られた場合、関数は自身にかかわるソース情報を
(デコンパイルなどで特殊な方法で別途得る以外)他の一般的な言語と同様、
いっさい失ってしまうのが当り前…というような印象を受けるのですが。
820:デフォルトの名無しさん
06/01/10 22:47:35
>>819
ANSI CL の範囲では無いと思う。ANSI Smalltalk もソースコードの管理までは
規定してないでしょ?
821:デフォルトの名無しさん
06/01/10 23:15:09
function-lambda-expression()
lambda 式が取れなくても規格合致だけど
822:デフォルトの名無しさん
06/01/11 06:36:04
>>819
「関数」はソース+定義環境だから、ソースだけ取れてもそれを保存
するみたいなことには向かないだろうね。デバッグの助けにするだけなら
いいだろうけれど。
(let ((n 0))
(defun incr (k)
(incf n k)))
なんてした時に、incrのソースはどこからどこまで? ってことね。
823:デフォルトの名無しさん
06/01/11 16:34:30
なるほど。Smalltalkのブロック(クロージャ)のソースは、メソッド(関数)のそれと
違って容易にはたぐれない…のと状況は似ていそうですね。ありがとうございます。
824:デフォルトの名無しさん
06/01/11 17:02:36
URLリンク(www.shiro.dreamhost.com)
これ読んでLisp使いたくなりました。
入門サイト教えろこの野郎m(__)m
825:デフォルトの名無しさん
06/01/11 18:29:40
>>824
ぐぐれこの野郎(^^)
826:デフォルトの名無しさん
06/01/11 18:41:45
>>824
URLリンク(www.geocities.jp)
xyzzy向けの内容が入ってるけど
827:デフォルトの名無しさん
06/01/11 20:37:58
>>824
URLリンク(www.h7.dion.ne.jp)
日本語のサイトではここが一番良かった。
828:デフォルトの名無しさん
06/01/13 19:50:45
すまんがLispで生産性があがるってのはどのへんのせいなのでしょうか?
>>824 の本を読んで興味持ったんだけれどよくわからんです。
コンパイル->実行とかの過程も処理対象にできるっていうのはやりようで面白いことできそうかと思ったんですが。
いまはC#つかいなのですが、.NETでのReflection,CodeDOMあたりの機能でしょうか。
829:デフォルトの名無しさん
06/01/13 20:10:48
いろんな要素が絡んでるから難しいけど。
最近機能が増えた言語や開発環境(なんでもいい)で、これが入って
生産性が上がったなーってもんをリストアップしてみ。
そのリストはLispの生産性の高さの理由のリストとかなり重なると思うよ。
830:デフォルトの名無しさん
06/01/14 01:43:00
使用者への効果でいうと「マルチパラダイム」が一番大きいと思う.型がない.
手続き型でも関数型でも論理型でも並列型でもオブジェクト指向型でも,それ
に合わせられる.クラスによる分類が向かない分野では,迷う事なくそれ以外
の手法をとれるしね.
マクロによるプログラム変形とかはそういった言語カスタマイズのための道具
で,本当はこの「どんなパラダイムでもどんとこい」というのが最大のメリッ
トだと思う.個人的にはね.
831:デフォルトの名無しさん
06/01/14 04:40:52
あのー
おばかで申し訳ないですが、
自分、VC++でコンソールアプリ作っております。
一部のc++の関数をLispで置き換えたいと思っておるのですが、
これって可能なんでしょうか?
おしえてえらいしと
832:デフォルトの名無しさん
06/01/14 13:24:37
>>831
だいたいできると思うけど、GC関係でいろいろややこしいところは覚悟しないといけない。
833:デフォルトの名無しさん
06/01/14 14:01:57
可能だけど,ある程度 C++ と Lisp の知識がいるよ.
1) DLL を出力できる Lisp コンパイラをもっている (普通の DLL と同じ)
2) ecl を組み込む
3) プロセス間通信する
3. がいちばん簡単かなー
834:デフォルトの名無しさん
06/01/14 17:27:18
>>829
C++からC#にかわったんだけど
・Generics(これはC#1.0になかったものとして) テンプレートでないのがちょっと不満。
・リフレクション
・デリゲート 呼び出しをオブジェクト化することでいろいろ使える。
・イベント デリゲートの呼び出し管理の簡略化
・リモーティング プロセス間呼び出しを楽にした感じ
・インテリセンス(これは開発環境) これあってすごい楽になった。ヘルプとか引く回数激減。
条件に基づいてコード生成、それの管理とかできるともっといろいろ面白いことできるのかなぁとおもうけど。
835:831
06/01/14 17:46:11
>>831
>>832
情報㌧クス
・・・ここ数日間、GCL,CLisp ( Chicken, Gambit-C )
が吐き出すCコードをVCでコンパイルして.Libを作成しようとしてますた
直接 DLLを出力できるLispコンパイラ使わないと駄目何すね
・・・DLLを出力できるLispコンパイラ、知っていたら教えてくらはい
(上で騒がれてた、ACLってやつなのかな?)
教えて訓でスマソ
836:831
06/01/14 17:48:34
↑
↑ 自分に礼いってた orz
>>832
>>833
ですた
837:デフォルトの名無しさん
06/01/14 17:55:44
>>834
敢えて挑発的に書けば...
Generics: 動的型なら元から不要
リフレクション: 元からある
デリゲート: クロージャの劣化再発明
イベント: クロージャが無いから無理してる
リモーティング: S式送ってevalさせればいいだけじゃん
インテリセンス: 80年代からあると思うけど
もちろん、静的型言語が持つ型安全性の保証とかはLispは弱い。
自分でがりがり書けば出来なくはないけれど。
条件に基づいてコード生成って?
838:デフォルトの名無しさん
06/01/14 18:10:18
LispWorks はできるよ.ACL もできるんじゃねーかな.
ECL もできる.GCL もできそうだけど… GCL 知らないスマン
# しかし CLISP は C コード吐かないだろう.
839:831
06/01/14 18:43:48
>>838
どうもっす
ECLでゆきます
・・CLisp、間違えます田
色んなのためしてたらわからなくなてた
ありがとうございました
840:デフォルトの名無しさん
06/01/14 19:04:59
>>837
C++から入ってC#やってるのでその辺の概念がまったくわからんです。
なんか最近頭がうにになってるし。
オブジェクト指向に頭が固まってる希ガス。
Lispというか関数型の利点がいまいちわかってないのでC++とかだとこんな風にしかできないけどそこをこんなエレガントにできるよって感じで教えてもらえないですか?
条件に基づいてコード生成ってのは、画面の生成とかをXAMLみたいなスクリプトに落として扱ってるんだけれどそれをそのままプログラムコードで生成したりしとか操作に基づいてロジックを生成してそのままプログラム中で扱えたりするといろいろできるかという話。
841:デフォルトの名無しさん
06/01/14 20:25:20
>>840
>操作に基づいてロジックを生成
これって具体的にはどういうイメージで言ってるの?
842:デフォルトの名無しさん
06/01/14 23:07:07
gclでウィンドウを生成してその中で二点を定めて
線を引くというような簡素なプログラムを組みたい
のですがどうすればよいでしょうか?どなたかご存知な
方お願いします。
まずウィンドウを生成するやり方からわかりません。。
843:デフォルトの名無しさん
06/01/14 23:29:43
GCL 使った事無いけど、これじゃないの?
Tcl/Tk は別途インスコする必要あるかもしれないけど。
URLリンク(www.sunsite.ualberta.ca)
844:デフォルトの名無しさん
06/01/15 00:02:22
>>841 行った操作を覚えたりとか、拡張言語として使うとかですかね。