- 1 名前:デフォルトの名無しさん [2007/08/12(日) 21:38:15 ]
- 過去スレ
Part17: ttp://pc11.2ch.net/test/read.cgi/tech/1177065699/ Part16: ttp://pc11.2ch.net/test/read.cgi/tech/1172404795/ Part15: ttp://pc10.2ch.net/test/read.cgi/tech/1151025773/ Part14: ttp://pc8.2ch.net/test/read.cgi/tech/1132275726/ Part13: ttp://pc8.2ch.net/test/read.cgi/tech/1115901841/ Part12: ttp://pc8.2ch.net/test/read.cgi/tech/1100229366/ Part11: ttp://pc5.2ch.net/test/read.cgi/tech/1091456033/ Part10: ttp://pc5.2ch.net/test/read.cgi/tech/1075630259/ Part9: ttp://pc2.2ch.net/test/read.cgi/tech/1069594582/ Part8: ttp://pc5.2ch.net/tech/kako/1058/10582/1058263391.html Part7: ttp://pc5.2ch.net/tech/kako/1042/10421/1042167213.html Part6: ttp://pc3.2ch.net/tech/kako/1031/10315/1031560687.html Part5: ttp://pc3.2ch.net/tech/kako/1023/10230/1023091882.html Part4: ttp://pc.2ch.net/tech/kako/1016/10162/1016211619.html Part3: ttp://pc.2ch.net/tech/kako/1008/10082/1008220265.html Part2: ttp://pc.2ch.net/tech/kako/1002/10025/1002584344.html Part1: ttp://piza2.2ch.net/tech/kako/987/987169286.html
- 626 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 14:02:36 ]
- そんで、大昔は、特殊形式でやる流儀もあったけど、
今はマクロで済むことはマクロでやる流儀。
- 627 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 14:39:20 ]
- 誰かfranzセミナー行った人、内容教えて
- 628 名前:624 mailto:sage [2007/11/23(金) 14:55:37 ]
- >625
関数だと引数をみんな評価してしまうけど、 マクロならしないってことですか? >626 すいません 特殊形式とマクロの違いがよくわかってないんですが、 引数を関数とは違う順序で評価するという点で同じで、 そのうち特殊形式はプリミティブなものと言うような理解で いいんでしょうか。
- 629 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 15:32:46 ]
- >>628
andもorも、「左から見ていって、途中でオシマイという運びになったらその後ろは評価しない」ものでしょ? でも関数は「まずすべての引数を評価する」機構なわけで、それではandもorも実現できない。 一方、マクロは引数をまったく評価しない。だからこれを使って定義されている。 特殊形式は、すべての引数を評価するとは限らない関数、みたいなもので、 想像の通り、プリミティブなものだ。 てかこの辺り、Lispの勉強の初日や二日目の範疇じゃないか?
- 630 名前:デフォルトの名無しさん mailto:sage [2007/11/23(金) 22:22:56 ]
- 遅延評価を導入すれば関数として統一的に定義じゃないかという吊りかも
- 631 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 09:36:14 ]
- 脳内のイメージが遅延評価な人なのかもしれん。Haskell でも試してみたら?
- 632 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 11:00:01 ]
- >>628
なんのために書籍の「ON LISP」があると思っているのか
- 633 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 11:28:27 ]
- 賢い人を更に教育するため。
私たちにとっては,On Lisp でレベルアップして, 更にいろいろ教えてくれる様になったその人たちに より突っ込んだを質問が出来るようになる。だな。
- 634 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 13:54:45 ]
- 初心者はANSI Common Lispがいいよ。On Lispはちょっと応用すぎる。
あとはEmacs Lisp Tutorialとかも参考になるだろうね。
- 635 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 14:04:06 ]
- Scheme→Common Lispだと拒否しちゃいそうだけど
Common Lisp→Schemeだと使い分けられそう。
- 636 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 14:08:24 ]
- プラットフォームがBlackboardならScheme、それ以外ならCommon Lisp。
- 637 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 15:35:48 ]
- 引数の評価についてはSICPでも超序盤で触れてるね
- 638 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 16:42:39 ]
- >>633のような輩に無料で教えるほど賢い人は暇ではないだろうな
- 639 名前:624 mailto:sage [2007/11/24(土) 22:13:01 ]
- >629
>andもorも、「左から見ていって、途中でオシマイという運びになったらその後ろは評価しない」ものでしょ? なるほど、単なる論理演算かと思ってました ありがとうございます >630,631 最近Haskellをかじって うはwwwマクロもういらねんじゃね?www とかいって喜んでたんですが、やっぱりそれであってるんですね
- 640 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 02:35:01 ]
- >>115-128 あたりで同じやりとりをした気がするけど、遅延評価でも関数じゃ setq とかが書けないんで、マクロは必要。
- 641 名前:デフォルトの名無しさん [2007/11/25(日) 03:53:03 ]
- マクロがあってもスペシャルフォームは書けないはずだけど。
- 642 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 10:05:48 ]
- setq って quote して set するだけだと思ってたけど、他に何かしてたっけ?
- 643 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 13:39:38 ]
- 遅延評価でquoteが書けるか?
- 644 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 16:05:00 ]
- >>642
説得してる
- 645 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 16:12:29 ]
- >>642
それだと(多くの処理系では)グローバルしかセットできない
- 646 名前:デフォルトの名無しさん mailto:sage [2007/11/25(日) 17:16:37 ]
- なるほど。
# 普段 ELisp しか使ってないから、 set するだけだと思ってた。 じゃ、 case とかが書けないからマクロは必要、に訂正かな。
- 647 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 01:33:45 ]
- >>635
SchemeとXyzzyLispって俺はどうすれば…。
- 648 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 02:05:34 ]
- どうしようもないね
- 649 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 03:29:28 ]
- >>635
俺は逆だなぁ、CLだとなんでも揃うのだけどSchemeだと原理主義ありきなんで妥協してくれないから。
- 650 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 11:05:23 ]
- 原理主義ってどんなの?
「プリミティブがあれば充分」論者はR6RSで少なくなっていくと思う。 moduleとかOOとか。
- 651 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 11:21:24 ]
- じゃあ、さっさと R6RS を実装しやがれ
- 652 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 11:33:55 ]
- あんなR6RSを正直に完全実装するのがでてくるかな?
リファレンス実装以外で。
- 653 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 11:38:14 ]
- 今のメジャーな処理系が実装するというよりは、新しい処理系で R6RS 準拠ってのが出てきそうな気がする
- 654 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 11:57:18 ]
- SchemeのC++0xやー
- 655 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 17:28:37 ]
- 個人的にはR5RSにリードマクロとsyntax-caseと{read,write}-byteとfile-seekとsystemと環境を明に操作する手段とimplicit forceとfull numeric towerとFFIさえあれば良いだけなんだけどなぁ
実装してる処理系はあるけど標準化されてないってのがネック UTF-8ファイルの読み書きで1バイト読み込むのか1文字読み込むのか実装依存(1文字読み込む実装は知らないけど)だし 構文オブジェクトもファーストクラスにして (define foo (syntax ...なんて構文で定義したり applyの第1引数に構文オブジェクトを受け取るように出来たらいいのに でもそうすると構文木解釈系でしか動かないだろうから相当遅くなるし そもそも合成構文はevalされる前に展開されるから無理か ただCLと違って値も関数もdefineで定義できるのに 構文定義だけdefine-syntaxってのが美しくない気がする define-syntaxは処理系に対して、defineは実行系に対しての構文だと割り切るしか無いか
- 656 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 19:57:37 ]
- そういえば以前PCLの翻訳が進んでるって話題でてたけどどうなったんだろう。
中止になったのなら半分まで進めて止まってる翻訳再開しようかな・・・
- 657 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 22:43:16 ]
- >>656 あなたは「RHG読書会」というお告げが聞こえたような気がした --more--
- 658 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 11:59:24 ]
- >>656
Lisp関係の書籍出している出版社に問い合わせてみては? 既に進んでいるなら、翻訳者陣に参加して加速してくださいw
- 659 名前:デフォルトの名無しさん mailto:sage [2007/11/29(木) 16:42:48 ]
- >655
ハゲド ごちゃごちゃしたいならCLに行けば良いんだから schemeは原理主義的な性格を守っていってほしい 構文オブジェクトは普通のマクロ入れると コンパイラのコード生成ルールを吐いてくれるように出来ないかな? ほんとに動的なマクロだと無理だろうけど...
- 660 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 13:58:46 ]
- continuation の挙動について理解できていない点があり,
以下のような 2 種類の Scheme コードを書いてみました. ;;; case-A ---------------------------------------- (define continuation-A #f) (define procedure (lambda (n) (define counter-A n) (call-with-current-continuation (lambda (k) (set! continuation-A k) (write counter-A) (newline) ) ) (set! counter-A (+ counter-A 1)) (write counter-A) (newline) ) ) (procedure 0) ; ==> 0 と 1 が表示される (continuation-A #t) ; ==> 2 が表示される (continuation-A #t) ; ==> 3 が表示される (continuation-A #t) ; ==> 4 が表示される ;;; case-A おわり
- 661 名前:660 mailto:sage [2007/12/06(木) 14:00:00 ]
- ;;; case-B ----------------------------------------
(define continuation-B #f) (do ((counter-B 0 (+ counter-B 1))) ((= counter-B 10) 'finished) (if (= counter-B 5) (call-with-current-continuation (lambda (k) (set! continuation-B k)))) (write counter-B) (newline)) ; ==> 1 2 3 ... 7 8 9 finished が表示される ;;プログラム実行部 (continuation-B #t) ; ==> 5 6 7 8 9 finished が表示される (continuation-B #t) ; ==> 5 6 7 8 9 finished が表示される (continuation-B #t) ; ==> 5 6 7 8 9 finished が表示される ;;; case-Bおわり
- 662 名前:660 mailto:sage [2007/12/06(木) 14:02:18 ]
- case-A では
continuation-A が生成されたときから変数 counter-A が ずっと見えたままであり, continuation-A の呼び出しごとに counter-A の束縛値が 1 ずつインクリメントされていく. (continuation-A が呼ばれるたびに, 「continuation-A 生成時における counter-A の束縛値」である 0 に いちいちリセットされることはない.) case-B では continuation-B が呼ばれるたびに counter-B の束縛値は 「continuation-B 生成時の counter-B の束縛値」である 5 に リセットされる. 多分基本的なところが理解できていないのだと思いますが, この 2 つのコードにおける continuation 上の変数の見えかたについて なぜこのような違いが生ずるか,お教えいただければ助かります.
- 663 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 15:14:39 ]
- わざわざdoなんか使うから話が余計ややこしくなってる。
doを再帰に展開してごらん。
- 664 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 15:14:49 ]
- doは再帰だから。
doのdefine-syntaxがR5RSに書いてあるから読んでみたらどうよ? 束縛環境を良く考えると分かるはず。↓while版 (define continuation-B #f) (let ((counter-B 0)) (while (< counter-B 10) (if (= counter-B 5) (call-with-current-continuation (lambda (k) (set! continuation-B k)))) (write counter-B) (write-char #\ ) (inc! counter-B)) (print 'finished)) (continuation-B #t) (continuation-B #t) (continuation-B #t)
- 665 名前:デフォルトの名無しさん mailto:sage [2007/12/06(木) 15:15:39 ]
- do は counter-B の値を破壊的に書き換えてない。
新しい環境作って、そこで同じ名前に別の値を束縛してるだけ。 だから元の場所に戻ると、そこの環境にはそのときの値が残ってるから、その値が参照される。 set! は破壊的に書き換えるから、元の値が残ってない。
- 666 名前:デフォルトの名無しさん mailto:sage [2007/12/07(金) 04:31:10 ]
- Clojure試してるんだけどClassCastExceptionばかりで使い物になんないよ……
どうなってんのこれ。
- 667 名前:デフォルトの名無しさん mailto:sage [2007/12/07(金) 20:01:29 ]
- clusure じゃないの?って検索してみたら…
java スレ行け。
- 668 名前:デフォルトの名無しさん mailto:sage [2007/12/07(金) 20:02:20 ]
- × clusure
○ closure
- 669 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 01:05:55 ]
- >>666 作ってるよーという話がでたばかりの言語に安定性を期待しすぎなんじゃないの?
- 670 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 02:36:47 ]
- Clojureは広い意味でのLISPっぽさがあっていいんじゃないの?
- 671 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 08:02:24 ]
- 一般的なLispとの違いがまとめてあるけど、
clojure.sourceforge.net/reference/lisps.html どう考えてもLispでしょ。 Haskell方面で良く使われているSTM、 それにreactive Agent使った並列Lispの一種で面白いと思う。 STMでいろいろ遊んでみたかったんで試してみます。>>666サンクス >>667みたいな馬鹿はなんなんだろ。
- 672 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 09:36:17 ]
- java で書かれたなんらかの言語の実装系に問題があるなら
なんらかの言語は無関係と思うが? ClassCastException って java の例外でそ?
- 673 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 09:39:16 ]
- 661=671乙
javaで書かれた何かの言語の処理の実装系に問題があるなら その何かの言語よりjavaに通じた人に質問する方が効果あると思うが? ClassCastException は java の例外でしょ?
- 674 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 09:43:08 ]
- と考えたが、Cで書かれたschemeの処理系に問題があった場合、
C使いだけでなくschemerに聞くのも有りか… javaグラマに偏見あるな俺は
- 675 名前:671 mailto:sage [2007/12/08(土) 10:12:13 ]
- >>673
>>664は俺なんだけど何で分かったの!びっくり! と思ったら>>661 orz >>666の間違いかよ!
- 676 名前:673 mailto:sage [2007/12/08(土) 10:52:39 ]
- >> 675
誤りについては御寛恕賜りたく、
- 677 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 12:54:42 ]
- >>674
あるみたいだね
- 678 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 13:17:21 ]
- 最初はJDK1,7のクロージャの実装がまだバグが多くて愚痴った内容を誤爆していたのかと思った。
JVMの上で動くClojureというLISP処理系の話とは思わなかった。
- 679 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 13:53:24 ]
- >>671
>>>667みたいな馬鹿はなんなんだろ。 2ch だからといって安直に馬鹿とかアホとか書くのは止めた方が良いよ。
- 680 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 14:20:34 ]
- ポメラニアンファック! ヽ(`Д´)ノ
- 681 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 04:58:51 ]
- >>679
書いた本人が安直な馬鹿だから、言ってもしょうがない。
- 682 名前:デフォルトの名無しさん mailto:sage [2007/12/09(日) 19:56:01 ]
- >>666
ClassCastExceptionなんていうJavaの例外が出てる時点で、処理系の不具合だろうが。 不具合あるなら、ソース読むか、コミュニティに報告するかだろ。 それができないんだったら、安定版がリリースするまでおとなしく黙ってろ。
- 683 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 01:39:04 ]
- >不具合あるなら、ソース読むか、コミュニティに報告するか
あるいは愚痴を言う、だろ? そのキツい態度はこのスレに取って良い未来を生み出さないと思うのだが。
- 684 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 04:00:09 ]
- >>683
その優しい態度も良い未来を生み出さないという意味では同じであろう。 つまり、好きにそれぞれの芸風でやってくれ。w
- 685 名前:デフォルトの名無しさん mailto:sage [2007/12/10(月) 08:09:12 ]
- 俺は優しくしているつもりはない。
ただフレームを生み出すよりは無視する方がまだマシだというお馴染みの主張をしたいだけで
- 686 名前:デフォルトの名無しさん [2007/12/11(火) 10:12:56 ]
- R6RSなんかより、MS謹製のLisp#に期待だなぁ。
強力なIDEの付いたVisual Lisp# 2008出してくれないかな。。
- 687 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 10:22:16 ]
- 俺は型付き Lisp が欲しいな。勿論型推論込みで。
- 688 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 12:00:24 ]
- インタープリタで型推論とか出来るんだろうか
- 689 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 12:44:23 ]
- hugsとかやってるじゃん
- 690 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 19:11:27 ]
- >>686
どんなMS独自仕様が拡張されているの?
- 691 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 21:02:04 ]
- OCamlなんかもインタプリタで型推論してますね
ところでScheme48でscmファイルからモジュールを,openする方法ってないんでしょうか? モジュールを,openしたヒープイメージを,dumpか,buildする方法だとなんか大げさだし 標準入力で,openさせて-a batchする方法だと標準入力が塞がっちゃうし (open structure-name)とかで,openできればいいんですけど…
- 692 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 21:59:56 ]
- >>690
.NET Framework をシームレスに呼べるようになってたりするのだろう。w それはそれで便利かも。
- 693 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 22:16:56 ]
- F#ですか
- 694 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 22:33:57 ]
- MSによりLisp#が開発される暁には、.net frameworkを呼べるようになるだけではなく、
Java→C#で行われたような言語レベルでの大幅な強化・改善が行われるだろう。
- 695 名前:デフォルトの名無しさん mailto:sage [2007/12/11(火) 22:38:10 ]
- 丸括弧が無くなるんじゃねーの
- 696 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 00:55:36 ]
- あの会社としては、CLtLとかRxRSなんて気にしないで新標準を作っちゃうんだろうけど、
それでも依然として LISP ではあるところが LISP の包容力の大きさだ。w まじでやってほしい気がしてきた。
- 697 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 10:45:55 ]
- lispであるための条件って
表現がS式であることしか無いような気がしてきた
- 698 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 16:29:24 ]
- M式の立場は?
- 699 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 17:06:11 ]
- SM式?
- 700 名前:デフォルトの名無しさん mailto:sage [2007/12/12(水) 20:24:54 ]
- 665で1文字読み込む実装は知らないなんて書きましたけど
無知すぎました エンコーディングさえ設定すれば1文字読み込むことも出来る実装がちゃんとあるんですね
- 701 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 09:49:24 ]
- >>695
( ) の代わりに全部 { } で書くの?
- 702 名前:デフォルトの名無しさん mailto:sage [2007/12/13(木) 17:35:11 ]
- >>700
>665で1文字読み込む実装は知らないなんて書きましたけど 665にはそんな記述見あたらないんだけど… 655の間違いだな
- 703 名前:デフォルトの名無しさん [2007/12/13(木) 22:19:54 ]
- >>695
dylanのことかーっ
- 704 名前:691 mailto:sage [2007/12/14(金) 01:07:29 ]
- slib/scheme48.initに答えが書いてありますねorz
slibはscheme48を冷遇してるから期待してなかったんですが…
- 705 名前:700 mailto:sage [2007/12/14(金) 20:29:02 ]
- >>702
訂正どうもです
- 706 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 23:11:54 ]
- 『Gaucheプログラミング』
Kahuaプロジェクト 著 川合 史朗 監修 ISBN978-4-87311-348-7 定価3,360円
- 707 名前:デフォルトの名無しさん mailto:sage [2007/12/14(金) 23:50:51 ]
- >>706
発売日は決まったの?
- 708 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 07:58:50 ]
- >>706
「プログラミングGauche」じゃなかったっけ?
- 709 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 08:43:01 ]
- 「プロGaucheグラミング」
- 710 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 08:46:56 ]
- 「プGロaグuラcミhンeグ」
- 711 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 08:50:12 ]
- それが出たら終了だな
- 712 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 09:29:05 ]
- 「プログラミング」
∩___∩ | ノ ヽ / ● ● | G、Gauche! | ///( _●_)//ミ 彡、 /⌒)(⌒ヽノ ./ / / \ \ l ノ `ー‐'
- 713 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 12:14:48 ]
- ガウチェ
- 714 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 17:26:12 ]
- assqとassocはeqとequalの違いがあると本に書いてありました。
でも、どんな場合に違いがでるのかわからないので説明があるどこかのURLを教えてください。 お願いします。
- 715 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 17:49:32 ]
- >>714
eqとequalの違いは判る人? それすら判らない人?
- 716 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 17:50:56 ]
- >>714
www.google.co.jp/search?q=eq+equal
- 717 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 18:35:24 ]
- >>714
"Comparator"の違い。
- 718 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 18:37:57 ]
- >>715
わかりません。 >>716 やってみましたが下記のような感じで書いてあり、いまいち初心者にはピンと来ないのです。 eq 二つのオブジェクト(実体)が同じものの時。 実体が同じということは、その内容が変われば、他方の内容もそれにつれて変わるような関係。 シンボルや、整数値の場合は、名前や値が同じだけで同じと判別する。 equal 中身が同じものを指しているなら真。
- 719 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 18:49:29 ]
- >>714
一致する場合はこう。 (assq 'a '((a b) (c d))) ; => (a b) (assoc 'a '((a b) (c d))) ; => (a b) 違いは以下のような場合。実行してみるとこういう違いがある。 (assq '(4 5) '(((1 2) 3) ((4 5) 6))) ; => #f (assoc '(4 5) '(((1 2) 3) ((4 5) 6))) ; => ((4 5) 6) >>718の説明から理解するのは難しい。
- 720 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 18:50:39 ]
- >>718
Javaの == と equals との関係に似ている eq はポインタ同値
- 721 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 18:59:02 ]
- >>718は変。
eq < 二つの引数が同じオブジェクトなら真。 equal < 二つの引数が別のオブジェクトでも中身が同じなら真。
- 722 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 19:09:49 ]
- >>718
うるさいことを言わなければ、は以下のような使い分けになる。 ・シンボルであることが明らかな場合は eq を使うことができる。(eqのほうが速い) ・そうでないときは equal が安全。 ・その中間として eql ってのがある。構造のあるもの(リスト・文字列・配列など)でないことが 判っていればこちらのほうが速い。 ・数値同士だと判ってるなら =、文字列同士なら string= がたぶん速い。 なぜこんなことになってるか知りたければもっと勉強するべし。
- 723 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 19:10:00 ]
- >>719-721
ありがとうございます。すごくよくわかりました。 (assq '(4 5) '(((1 2) 3) ((4 5) 6))) ; => #f (assoc '(4 5) '(((1 2) 3) ((4 5) 6))) ; => ((4 5) 6) の場合には(4 5)が別々のオブジェクトをさすポインタだからeqでは偽になるんですね。 でもequalだとオブジェクトが同じだから真になるんですね。
- 724 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 19:19:45 ]
- >>718
assqの実装は大体こんな感じになっている。 (defun assq (key alist) (cond ((null alist) nil) ((eq key (car (car alist))) (car alist)) (t (assq key (cdr alist))))) assocならこう (defun assoc (key alist) (cond ((null alist) nil) ((equal key (car (car alist))) (car alist)) (t (assq key (cdr alist))))) >>724が言うようにeqlや=やstring=を使えば用途に応じて高速なものが使える。
- 725 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 19:25:35 ]
- >>723
> でもequalだとオブジェクトが同じだから真になるんですね。 < でもequalだとオブジェクトの中身が同じだから真になるんですね。
- 726 名前:デフォルトの名無しさん mailto:sage [2007/12/15(土) 19:34:35 ]
- >>722>>724>>725
ありがとうございます。 >>722 むずかしいけど、>>724の解説をみて、使うと便利だということは理解できました (^ ^; >>724 そういうプログラムなんですね。eqとequalの使われてるところとか参考になりました。 >>725 ありがとうございます。そういうことを書いたつもりでした。でもプログラミングのことを正確に話し言葉にするのって難しいです。
|

|