COMMON LISP JP > Archives > 2010/09/23

2010/09/23 04:38:40 UTCPocket
#
いまslimeをつかっていて気がついたのですが。
#
(loop for x in '('a 'b 'c)
	    when (eql x 'a)
	    collect x)
#
こう入力した場合と
#
あ、自己解決しました。もうしわけありません..
2010/09/23 04:43:45 UTCshiro
#
あるある。問題を書いてみると解決しちゃうっていうこと。
2010/09/23 04:47:46 UTCPocket
#
もうしわけありません..
#
人に説明しようとすると自分の頭で整理するので解決しちゃうんですよね.
#
(defvar all-pieces '('tasyou 'taisa 'taii 'kouhei 'tyuusyou 'tyuusa 'tyuui 'jirai 
		     'syousyou 'syousa 'syoui 'hikouki 'gunnki 'kihei 'tanku 'supai))
#
というdefvarを宣言しておいて、
#
(loop for x in '('GUNNKIi 'jirai)
	      when (not (or (eql 'GUNNKI x) (eql 'jirai x))) collect x)
#
あ..
#
こっちです。
#
(loop for x in all-pieces
	      when (not (or (eql 'gunnki x) (eql 'jirai x))) collect x)
#
と、やるとall-piecesからマッチした要素が削除されてでてくるかと思ったのですが、
#
実際はそのまま出てきてしまったのですが、何故なんでしょうか?
2010/09/23 04:50:42 UTCshiro
#
クオートが多かった、ってオチですね。
#
(defvar all-pieces '(tashou taisa ...)) とするか、 (equal ''gunnki x) などとするか。意図としては前者だと思うけど。
2010/09/23 04:51:41 UTCPocket
#
あ!たしかにそうですね...ここしばらくLispからはなれていたらほとんどわすれてしまっている..
#
ありがとうございます。
2010/09/23 04:58:08 UTCsnmsts
#
これ、個人的にも何度ひっかかったことか…。
2010/09/23 05:02:19 UTCg000001
#
quote関連で前からどういう風に書くのが良いのかなあという例があるんですが
2010/09/23 05:02:25 UTCshiro
#
クオートではひっかからないけど、データの定義が別パッケージにあってeqでマッチしない、というのは身に覚えが。ソースだけいくら睨んでてもわからないんですよね。
2010/09/23 05:03:12 UTCg000001
#
マクロ内部などでたまーに引数でわたってきた'foo(内部では''foo)というのを
#
'fooにしたいときがあって、(CADR (QUOTE (QUOTE FOO)))
#
としてしまうんですが、こういう場合はみなさんどうやってるのでしょうか
#
evalでしょうか
#
もしくは、そういうことをやりたくなるのが間違いなのかw
2010/09/23 05:05:04 UTCshiro
#
具体的にどういうケースでそうしたくなるんだろう
2010/09/23 05:12:25 UTCg000001
#
そうですよね、事例を探してみますー