- 1 名前:デフォルトの名無しさん [2011/07/06(水) 17:15:15.55 ]
- 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) (url pc11.2ch.net/test/read.so/tech/1181479267/l50 :part 3) (url pc11.2ch.net/test/read.cgi/tech/1201402366/l50 :part 4) (url pc11.2ch.net/test/read.cgi/tech/1215834213/l50 :part 5) (url pc12.2ch.net/test/read.cgi/tech/1234884136/l50 :part 6) (url hibari.2ch.net/test/read.cgi/tech/1270370267/l50 :part 7) □テンプレート置き場□ ttp://wiki.fdiary.net/lisp/ (id:guest pass:cl)
- 61 名前:デフォルトの名無しさん mailto:sage [2011/07/31(日) 22:08:29.48 ]
- 便乗して...
ideone.com/fu2He これが動かないのは何故でしょう?
- 62 名前:55==61 mailto:sage [2011/07/31(日) 22:13:24.18 ]
- 名前入れ忘れた
エラー文を調べたら局所変数にアクセスが云々と出てきたのですが、 外からアクセスはしてないように見えるのです
- 63 名前:デフォルトの名無しさん mailto:sage [2011/07/31(日) 22:49:44.40 ]
- >>61
CL はlisp-2だから ideone.com/lLwg2 あと、>>55 はxyzzyでも動くよ。 評価し忘れとかじゃない?
- 64 名前:デフォルトの名無しさん mailto:sage [2011/07/31(日) 23:01:58.21 ]
- >>55
>>63に補足すると、*scratch*で (defun foo (lst) (car lst)) を入力したらC-j(ctrlを押下中にj) (setq var (list 2 4 6 8 1 3 5 7 9 10) ) を入力したらC-j(ctrlを押下中にj) (foo var) を入力したらC-j(ctrlを押下中にj) このようにして一行ずつC-jを押すこと
- 65 名前:デフォルトの名無しさん mailto:sage [2011/08/03(水) 02:44:38.45 ]
- >>61
funcall の後ろに#’つけたら動いたよ
- 66 名前: 忍法帖【Lv=12,xxxPT】 mailto:sage [2011/08/03(水) 06:10:12.50 ]
- いや、なんつーか、>>63も>>65も
(defun qsort (lst) ... (append (qsort ...) ...) ...) って感じに呼べることをまず教えてやれよ……。
- 67 名前:デフォルトの名無しさん mailto:sage [2011/08/03(水) 06:43:28.89 ]
- こんな感じ。
ideone.com/fPEnC
- 68 名前:デフォルトの名無しさん mailto:sage [2011/08/04(木) 09:34:28.69 ]
- ECLだとquicklispからdrakma使えませんでした。
解決エロい人たすけて
- 69 名前:デフォルトの名無しさん mailto:sage [2011/08/04(木) 09:37:08.37 ]
- 解決エロい人 >> 解決できるエロい人 に直してください
- 70 名前:デフォルトの名無しさん mailto:sage [2011/08/04(木) 10:30:59.09 ]
- >>68
エラーメッセージは?
- 71 名前:デフォルトの名無しさん mailto:sage [2011/08/04(木) 11:29:14.64 ]
- Your Lisp does not support weak key hash-tables.
[Condition of type SIMPLE-ERROR] ECL 10.3.1 をapt-get install で入れて使っています。
- 72 名前:デフォルトの名無しさん mailto:sage [2011/08/04(木) 14:00:50.29 ]
- まんま書いてるじゃないですかー!
Drakmaが利用してるCL+SSLってライブラリがあって、 さらにそれが利用してるtrivial-garbageというライブラリが出してるエラー。 ECLがウィークハッシュテーブルに対応してないから出てる。 あるいは、ECLが実はウィークハッシュテーブル使えるってんなら、 簡単に使えるようになるから、バグレポートでもすればすぐ修正してくれると思う。 報告するのはDrakma相手じゃなくて、trivial-garbageの方ね。
- 73 名前:デフォルトの名無しさん mailto:sage [2011/08/04(木) 14:21:48.11 ]
- ttp://osdir.com/ml/lisp.ecl.general/2008-04/msg00171.html
読むと、ウィークハッシュテーブルに対応する予定はなさそうなんで、 ECL側の修正は割と無理っぽいんじゃないかと思う。 考えられる対応策: - CL+SSLに報告してECLだけ特別扱いしてもらう - curlのプロセスを実行して出力を読む - libcurlをFFI経由で使う - 別の処理系を使う - 別の言語を使う
- 74 名前:デフォルトの名無しさん mailto:sage [2011/08/04(木) 15:37:21.44 ]
- >>72,73
今後はdrakmaを使う時には別の処理系を使うようにします いろいろありがとうございました
- 75 名前:デフォルトの名無しさん mailto:sage [2011/08/04(木) 16:18:55.06 ]
- 解決エロい人がいるスレですね。
- 76 名前:デフォルトの名無しさん mailto:sage [2011/08/04(木) 16:44:41.51 ]
- かいけつゾロリとか快傑ズバットの亜種か。
- 77 名前:デフォルトの名無しさん mailto:sage [2011/08/04(木) 19:43:24.53 ]
- cl-annotで@export はしっかりできてるんですが@docなど他の使い方が分からない
cl-annotが使えるパッケージ内で(annot:enable-annot-syntax)を書くだけじゃもしや駄目? Undefined function SCRIPT-TES::DOC called with arguments ("shellscript ls ==") . [Condition of type CCL::UNDEFINED-FUNCTION-CALL]
- 78 名前:77 mailto:sage [2011/08/04(木) 20:09:57.53 ]
- 解決しました。
〜.asd のファイルには書かなくていいけど〜.lispの方に付け加えるだけで良かったみたいです。
- 79 名前:デフォルトの名無しさん mailto:sage [2011/08/04(木) 21:28:33.55 ]
- cl-annotとかは、
ttps://github.com/arielnetworks にあるコードでいっぱい使ってるので、見ると参考になると思う。
- 80 名前:デフォルトの名無しさん mailto:sage [2011/08/05(金) 00:15:37.50 ]
- >>53
自分のやり方が違うかもしれないが、テキストファイルにならない。
- 81 名前:デフォルトの名無しさん mailto:sage [2011/08/05(金) 00:55:25.96 ]
- >>80
dump-group-to-fileで作られるファイルのことですか?
- 82 名前:デフォルトの名無しさん mailto:sage [2011/08/05(金) 03:50:16.17 ]
- ll.la/LQ4F
中のファイルすべてHOMEにつっこんで sbclにquicklispインストール、cl-ppcreとtrivial-shellも一度quickloadで再起動でいけるはず。
- 83 名前:デフォルトの名無しさん mailto:sage [2011/08/05(金) 10:53:30.37 ]
- abclでmaximaが動くのはいつになるんだ
- 84 名前:デフォルトの名無しさん mailto:sage [2011/08/12(金) 00:53:45.82 ]
- 連想リストからある値の取得がうまくいかないので質問です。
以下のような状況です。 (setq list_a (list "a0" "a1" "a2")) (setq list_b (list "b0" "b1" "b2")) (setq list_c (list '('a . list_a) '('b . list_a) )) ここまで。 で、list_cに対して (cdr (car list_c)) を評価すると list_a が取れるのですが (car (cdr (car list_c))) にして、list_aの"a0" を取得したいのですが評価するとbacktraceになってしまいうまくいきません。 これはどうすればいいんでしょうか?
- 85 名前:デフォルトの名無しさん mailto:sage [2011/08/12(金) 01:15:31.43 ]
- >>84
なぜ二重にクォートしたし。 (setq list_c (list `(a . ,list_a) `(b . ,list_a))) ;; あるいは (setq list_c (list `(a ,@list_a) `(b ,@list_a))) (setq list_c (list (cons 'a list_a) (cons 'b list_a))) (car (cdr (car list_c))) ;; なぜ連想リストのアクセスにassocを使わないのか (cadr (assoc 'a list_c)) ;=> "a0" あと、Lisp界ではx_y_zじゃなくてx-y-zみたいに区切るのが普通。
- 86 名前:デフォルトの名無しさん mailto:sage [2011/08/12(金) 01:17:20.15 ]
- ああ、一番普通なの忘れてたわ。
(setq list_c `((a ,@list_a) (b ,@list_a)))
- 87 名前:84 mailto:sage [2011/08/12(金) 01:23:54.85 ]
- >>85
ありがとう、理解できました。
- 88 名前:デフォルトの名無しさん mailto:sage [2011/08/15(月) 02:27:11.12 ]
- labelsでエラーがでるのですが理由がわからいので教えてください。
scratchで以下の式を評価すると正常に動くのですが (defun foo () (labels ( (bar () (print "foo test") ) ) (bar) ) ) (foo) で "foo test"が表示される これをこのまま .emacsファイルに記述するとbacktraceになってしまいます。 ↓メッセージ Debugger entered--Lisp error: (void-function labels) (labels ((bar nil ...)) (bar)) foo() これはなぜでしょうか。またどのように解決したらよいでしょうか?
- 89 名前:デフォルトの名無しさん mailto:sage [2011/08/15(月) 02:38:59.99 ]
- >>88
そのプログラムの前に (requre 'cl) を付けると解決出来るんじゃないかな
- 90 名前:デフォルトの名無しさん mailto:sage [2011/08/15(月) 02:50:37.63 ]
- もちろん >>89 は (require 'cl) の typo です。。。
Emacs Lisp と Common Lisp は別物なので、もし emacs lisp を勉強したいなら、 Emacs Lisp 3 hibari.2ch.net/test/read.cgi/tech/1191875993/ に行くと良いと思います。 Common Lisp を勉強したいなら、Common Lisp 用の環境を整えると色々と 捗ると思います。
- 91 名前:デフォルトの名無しさん mailto:sage [2011/08/15(月) 03:18:26.75 ]
- >>90
ありがとう解決しました。 今後はEmacs Lispのほうで聞きますね。
- 92 名前:デフォルトの名無しさん mailto:sage [2011/08/15(月) 22:39:41.10 ]
- 時代はlispよりもhaskell
教養としてのプログラミングならこっちを勧めたい
- 93 名前:デフォルトの名無しさん mailto:sage [2011/08/16(火) 03:07:18.49 ]
- 自分の知る限り、Haskell は少なくとも 5 年前には注目を受けていたし、
Haskell に無い Lisp の特徴として S 式とマクロは知っておいた方が良いと思われ
- 94 名前:デフォルトの名無しさん mailto:sage [2011/08/16(火) 12:52:53.95 ]
- lispが理解できないとHaskellは無理だと思う
- 95 名前:デフォルトの名無しさん mailto:sage [2011/08/16(火) 18:01:20.91 ]
- Haskellが無理ならLispも無理だろう
- 96 名前:デフォルトの名無しさん mailto:sage [2011/08/16(火) 18:08:14.77 ]
- >>92-95
忍者より酷い
- 97 名前:デフォルトの名無しさん mailto:sage [2011/08/16(火) 18:10:31.20 ]
- どっちか勉強するのにもう一つの知識が必要みたいな議論がおかしい
まっさらな状態で今はじめるならHaskellの方が得るものは大きい
- 98 名前:デフォルトの名無しさん mailto:sage [2011/08/16(火) 18:32:14.29 ]
- そんな単純な比較が可能とは思えないが…
- 99 名前:デフォルトの名無しさん mailto:sage [2011/08/16(火) 18:46:49.49 ]
- カレーとおにぎりを比べるようなものだな
- 100 名前:デフォルトの名無しさん mailto:sage [2011/08/16(火) 18:56:45.41 ]
- で、どっちがカレーなんだ
- 101 名前:デフォルトの名無しさん mailto:sage [2011/08/16(火) 19:02:30.24 ]
- Haskellの説明でカリー化ってしょっちゅうくらいだからやはりHaskellがカレーじゃなかろか?
;;;ごめんなさい、ワタシが悪うございました。
- 102 名前:デフォルトの名無しさん mailto:sage [2011/08/16(火) 19:24:52.71 ]
- >>101
俺も同じ事思ったから大丈夫だ
- 103 名前:デフォルトの名無しさん mailto:sage [2011/08/16(火) 20:02:39.45 ]
- 別にどっち先に勉強しても、もう一方を勉強できないわけじゃないんだから。
好きな方先にやって後で別の方やれば良いよ。 HaskellだけやってたらHaskell自身の長所を理解できないし、 LispだけやってたらLisp以降に生まれたパラダイムを取り込めないじゃん。
- 104 名前:デフォルトの名無しさん mailto:sage [2011/08/17(水) 03:41:17.91 ]
- おにぎlispってなんかいいな
- 105 名前:デフォルトの名無しさん mailto:sage [2011/08/17(水) 06:47:24.00 ]
- haskellカレーにおにぎlisp
仲良くやっていけそうな気がする
- 106 名前:デフォルトの名無しさん mailto:sage [2011/08/17(水) 13:00:47.05 ]
- J( 'ー`)し<残さないで食べなさいね。
- 107 名前:デフォルトの名無しさん mailto:sage [2011/08/17(水) 16:11:13.82 ]
- 最近のコンビニにはカレー化おにぎりというのがあってだな
- 108 名前:デフォルトの名無しさん mailto:sage [2011/08/17(水) 16:11:51.86 ]
- なぜ「化」という文字が入る…
- 109 名前:デフォルトの名無しさん mailto:sage [2011/08/19(金) 09:42:20.53 ]
- >>83
command line版Maximaは(run_testsuite()を通過する意味で)動いてる筈。 ttp://abcl-dev.blogspot.com/2010/10/maxima-on-abcl-full-pass-on-test-suite.html ABCL版Maximaは、GCL版Maximaより遅かった様な…。
- 110 名前:デフォルトの名無しさん mailto:sage [2011/08/26(金) 10:59:32.41 ]
- 保守
- 111 名前:デフォルトの名無しさん [2011/09/06(火) 04:49:27.30 ]
- つかS式と基本5関数さえあれば何でもできるのに何でlispってアホみたいに方言多いの?
- 112 名前:デフォルトの名無しさん mailto:sage [2011/09/06(火) 04:59:00.08 ]
- 流石に純LISPだけでは実用性に欠けるから
よく使う関数を各社が実装した結果
- 113 名前:デフォルトの名無しさん mailto:sage [2011/09/06(火) 05:42:33.67 ]
- たぶんルールが少ないほうがバリエーションは増えるんだと思う
かつての2Dシューティングゲームみたいに
- 114 名前:デフォルトの名無しさん mailto:sage [2011/09/06(火) 05:54:29.02 ]
- >>111
チューリングマシンでプログラミングしてきたら答えが分かると思うよ。 >>111は何か他の所でまんま同じな文章見た気がするんでコピペだろうけど、 Lispの方言だけ何か特別視するのって凄いナンセンス。 ALGOLの方言とかいくつあるんだよとか逆に聞きたい。
- 115 名前:デフォルトの名無しさん mailto:sage [2011/09/06(火) 09:04:36.79 ]
- >>111 「S式と基本5関数さえあれば何でもできる」が嘘
まずは少なくとも cond か if の特殊形式がないとチューリング完全じゃないし、 lambda が無いのも微妙だろう。
- 116 名前:デフォルトの名無しさん mailto:sage [2011/09/06(火) 22:22:01.52 ]
- それだけではなんでこんなに方言があるのかという質問の答えとして弱いのではないか?
- 117 名前:デフォルトの名無しさん mailto:sage [2011/09/06(火) 22:50:56.94 ]
- 処理系を作るのが簡単だから
- 118 名前:デフォルトの名無しさん mailto:sage [2011/09/06(火) 23:20:31.02 ]
- 2進数の文字列から10進数に変換するにはどうしたらいいか教えてください。
- 119 名前:デフォルトの名無しさん mailto:sage [2011/09/06(火) 23:25:36.72 ]
- (parse-integer "1010" :radix 2)
- 120 名前:デフォルトの名無しさん mailto:sage [2011/09/07(水) 00:20:57.67 ]
- >>119
ありがとうございます。
- 121 名前:デフォルトの名無しさん [2011/09/07(水) 18:16:43.66 ]
- リスプの処理系より簡単な演算器もったスタックマシンのほうが簡単なきがしましたよ。
アセンブラなんて1行1命令で翻訳してだけだから原始的なものならこっちも簡単でした。
- 122 名前:デフォルトの名無しさん mailto:sage [2011/09/07(水) 18:20:18.73 ]
- 言語処理系を作るなら、まずForth処理系でも作ってみるのは、悪くないよね。
- 123 名前:デフォルトの名無しさん mailto:sage [2011/09/08(木) 06:28:12.39 ]
- Forthのかっこよさは異常
- 124 名前:デフォルトの名無しさん mailto:sage [2011/09/08(木) 08:59:14.97 ]
- Obi-Wan Kenobi もForthを使えって言ってたしな
- 125 名前:デフォルトの名無しさん [2011/09/08(木) 11:30:03.13 ]
- そのネタ聞くのはもう100万遍目だ
- 126 名前:デフォルトの名無しさん mailto:sage [2011/09/08(木) 18:58:27.75 ]
- >>125
> そのネタ聞くのはもう100万遍目だ (/ (expt 1000.0 2) 365) 毎日そのネタを平均一回聞けるとして2739.726年かかるよ
- 127 名前:デフォルトの名無しさん mailto:sage [2011/09/08(木) 21:20:54.60 ]
- 今日という一日を100万回繰り返した超能力者である可能性も捨て切れない。
- 128 名前:デフォルトの名無しさん mailto:sage [2011/09/08(木) 21:25:29.10 ]
- >>127
> 今日という一日を100万回繰り返した超能力者である可能性も捨て切れない。 2739.726歳の超能力者か、なんかすごいね。
- 129 名前:デフォルトの名無しさん mailto:sage [2011/09/09(金) 14:27:37.34 ]
- 激しくどうでもいいなwww
- 130 名前:デフォルトの名無しさん mailto:sage [2011/09/09(金) 14:41:31.45 ]
- まどマギだったら歳とらない
- 131 名前:デフォルトの名無しさん [2011/09/09(金) 14:47:43.34 ]
- \オッカリ〜ン/でも多分としとらない。
- 132 名前:デフォルトの名無しさん mailto:sage [2011/09/09(金) 17:35:10.00 ]
- エンドレスビリオン
- 133 名前:デフォルトの名無しさん mailto:sage [2011/09/10(土) 12:57:05.63 ]
- あんまり面白かったのでループでまわしたのかもしれんぞ。
(dotimes (n 999998) (print "Forthを使え"))
- 134 名前:デフォルトの名無しさん mailto:sage [2011/09/10(土) 18:26:28.62 ]
- なんか問題(良問)を出して、それを実装して、プログラミングベンチマークテストしようぜ。
環境は基本Linuxベースであること(他の環境でも可だけど、明言すること)、使っている言語のバージョンは明言必須。 良問のネタの候補がない場合は、Python, Perl, Rubyの宿題スレから探してくる。
- 135 名前:デフォルトの名無しさん mailto:sage [2011/09/12(月) 02:28:07.87 ]
- scheme初心者スレを探しているのですが無いみたいなので
scheme初心者の質問もここで良いのでしょうか?
- 136 名前:デフォルトの名無しさん mailto:sage [2011/09/12(月) 02:33:27.81 ]
- >>135
初心者スレはないけどこっちよりは適切なはず Lisp Scheme Part32 hibari.2ch.net/test/read.cgi/tech/1303299696/
- 137 名前:デフォルトの名無しさん mailto:sage [2011/09/12(月) 06:57:07.46 ]
- >>134
とりあえず問題によるんじゃね? そういえばどう書く?org って、いつのまにかすたれたね
- 138 名前:デフォルトの名無しさん mailto:sage [2011/09/12(月) 14:10:11.65 ]
- >>137
いいのが思いつかないので、ベタに(random 1234567890)で生成されるn個の値をソートせよ。ぐらいではダメかね? 期限は9/23(金)21:00まで。ソース晒しは9/16(金)21:00から。 単純なソートだと工夫の余地がなくて速度の違いって出ないものなのかな。 ;; ### 絶賛、問題募集中 ###
- 139 名前:デフォルトの名無しさん mailto:sage [2011/09/12(月) 16:25:34.19 ]
- これでいいんじゃね?
The Computer Language Benchmarks Game shootout.alioth.debian.org/ 既にSBCL向けのコードがあるから、 俺の書いたコードの方が速いぜとか、 この処理系の方が早いぜとか。
- 140 名前:デフォルトの名無しさん mailto:sage [2011/09/12(月) 19:38:24.28 ]
- >>139
> 既にSBCL向けのコードがあるから、 > 俺の書いたコードの方が速いぜとか、 > この処理系の方が早いぜとか。 その心は? 個人的には入門者でもなんとか参加できるレベルの問題にしたいです。ジムカーナなどに使われるtime result形式で個々人の励みにしてほしいなあと。 もちろん、入門者が相当がんばれば参加できるレベルの問題をたまにやるのは良いと思います。
- 141 名前:デフォルトの名無しさん mailto:sage [2011/09/12(月) 21:52:32.59 ]
- 誰も参加してないのに、俺ルール炸裂かよw
- 142 名前:デフォルトの名無しさん [2011/09/13(火) 07:02:30.34 ]
- Linux上のSBCLでLispbuilder-SDLをasdf-installから入れようとすると
まぁGPG鍵はもちろんスキップするんだが、その後すぐに cocoahelperが有りません的なこと言われて止まります Linuxだからいらねぇんだよおおおおおおおおおおおおおおおおおおおおおおおお
- 143 名前:デフォルトの名無しさん mailto:sage [2011/09/13(火) 07:12:31.29 ]
- カリカリしないで一息いれなよ
っ 森永ココア
- 144 名前:デフォルトの名無しさん mailto:sage [2011/09/13(火) 07:35:54.70 ]
- >>142
ASDF-Installとか今さら使ってんじゃNEEEEEEEEEEEEEEEEE!!1! このボケが! 私としては、ASDF-Installの代わりにQuicklispを使うことをお勧めします。 SBCLで動かないパッケージははねられているみたいですし。 それでも動かない場合、もっと詳細なエラーメッセージを頂けると、 解決に協力できるかもしれません。
- 145 名前:デフォルトの名無しさん [2011/09/13(火) 07:38:41.77 ]
- ASDFは時代遅れだったのか……!!!!!!
cocoaは消えて、今度はcffi-examples見つからなかったとか言いやがる ちなみに私はヴァンホーテンが好きです。 とりあえずQuickLisp使ってみます
- 146 名前:デフォルトの名無しさん mailto:sage [2011/09/13(火) 08:41:41.68 ]
- >>145
ASDFというか、ASDF-Installが過去の遺物になりつつある、 といった感じになっています。森永も悪く無いのではないでしょうか。 ASDFという、ライブラリに対する操作を統一するAPIの上に、 QuicklispやASDF-Installなどの、ライブラリを管理する仕組みが作られています。 Quicklispは比較的最近現れたもので、まだベータ版なのですが、 抜群の使いやすさから、一気に定着してしまった感がありますね。
- 147 名前:デフォルトの名無しさん mailto:sage [2011/09/13(火) 14:16:59.49 ]
- Rをclから使いたいからrclとかいうの入れた
それをmaximaから呼ぶとlapackが2重に呼ばれるのかおかしくなる 何か回避方法ないの?
- 148 名前:デフォルトの名無しさん mailto:sage [2011/09/13(火) 23:31:07.27 ]
- 一般論だけど、環境、エラーメッセージ、バージョン、操作、
そういった物を書いてくれないと、仮に回避方法が分かる人でも、 同じ所ではまったことがないと答えられんと思うよ。 あと、Maximaの話なら、 【数式処理システム】 Maxima 【Common Lisp】 kamome.2ch.net/test/read.cgi/math/1287274183/ の方が回答を得られるんじゃない?
- 149 名前:デフォルトの名無しさん [2011/09/14(水) 08:59:05.79 ]
- >>138
projecteuler.net/
- 150 名前:SCHEME餃子 ◆8X2XSCHEME mailto:sage [2011/09/14(水) 23:41:49.99 ]
- ブログとかで Project Euler の解き方の解説してるのみたら「XXは自明なので」とか書いてあったりするけど、全然自明じゃねーよって感じのが多くて困る。
Project Euler って数学の問題でもあるから単なるプログラミング演習の問題とはちょっと雰囲気が違うかも。 もちろん、身に付くことは多いけど。
- 151 名前:デフォルトの名無しさん mailto:sage [2011/09/15(木) 12:57:41.32 ]
- >>150
そんなの高校数学の教科書からたくさんあるだろ
- 152 名前:デフォルトの名無しさん mailto:sage [2011/09/22(木) 00:30:22.73 ]
- スイマセン、基本的なところなんですが
>(defun test1(x)(eq x #'+)) TEST1 >(test1 #'+) T なのに >(defmacro test2(x)(eq x #'+)) TEST2 >(test2 #'+) NIL になるんですが、マクロと関数で引数の評価の仕方が違うんでしょうか?
- 153 名前:デフォルトの名無しさん mailto:sage [2011/09/22(木) 01:06:48.59 ]
- >>152
そこは基本的っていうか、むしろ嵌りどころ。 #'は特殊形式functionに展開されるんだけど、functionが返す関数オブジェクトは、 必ずしも毎回同じ物とは限らない、っていう話だったはず。 ttp://www.apl.jhu.edu/~hall/Lisp-Notes/Dalton-Pitfalls-List.text の"Function vs eq."に詳しい。
- 154 名前:デフォルトの名無しさん mailto:sage [2011/09/22(木) 01:12:36.50 ]
- って、待った。test2ってクォートしてないの?
(defmacro test2(x)`(eq ,x #'+))でなく?
- 155 名前:デフォルトの名無しさん mailto:sage [2011/09/22(木) 01:22:58.45 ]
- まんま>>152の通りなら、コンスの '(function +) と関数の #'+ を比較してるので、
マクロの展開結果がNILになり、評価結果もNILになる。 そういう勘違いなら、Common Lispの評価モデル自体を理解してないことになるので、 HyperSpecとか書籍とかマクロの解説とかを読んだ方が良いと思う。 マクロに渡されるのは値じゃなくて式。
- 156 名前:152 mailto:sage [2011/09/22(木) 01:54:26.73 ]
- >(defmacro test3(x)(equal x '(function +)))
TEST3 >(test3 #'+) T 納得。夜遅くにスイマセンでした
- 157 名前:デフォルトの名無しさん [2011/09/30(金) 14:34:56.92 ]
- 自明は相手をごまかす頻出単語
- 158 名前:デフォルトの名無しさん mailto:sage [2011/09/30(金) 14:56:15.85 ]
- 毎回公理から一つ一つ積み重ねるしかないのか
- 159 名前:デフォルトの名無しさん [2011/10/05(水) 22:10:00.39 ]
- キーワード引数が指定されなかった場合と、
キーワードの値としてnilが渡された場合って区別できるんでしょうか? 例えば (defun hoge (&key (foo)) foo) として、 (hoge) の場合と (hoge :foo nil) の場合を区別できるかどうか、という意味です。
- 160 名前:デフォルトの名無しさん mailto:sage [2011/10/05(水) 22:26:42.09 ]
- &key では判断するために supplied-p-parameter があるよ。
CL-USER> (defun hoge (&key (foo nil foo-supplied-p)) (values foo foo-supplied-p)) HOGE CL-USER> (hoge) NIL NIL CL-USER> (hoge :foo nil) NIL T
- 161 名前:159 mailto:sage [2011/10/05(水) 22:46:31.24 ]
- おぉー。全く知りませんでした。
ばっちりです。ありがとうございます。
|

|