Discussion:
[Lisp-cn] [CL]有没有可能写出能提供语法如(our-setq (a 1) (b 2) (c 3))的宏?
宋为@凉拌茶叶
2014-02-25 15:33:03 UTC
Permalink
我希望定义一个宏可以提供语法将
(setq a 1 b 2 c 3)
改成:
(our-setq (a 1) (b 2) (c 3))
然后我发现事情好像不太科学,(a 1)这样的格式会直接被理解成函数调用然后爆掉……
想了一下意识到这样倒是可以:
(our-setq '(a 1) '(b 2) '(c 3))
但这样我就觉得Common Lisp的宏功能特别有限了,比较惆怅。

我期待宏能够给予我任意定义语法的能力,是我理解有问题么?
--
--
Lisp-cn(Lisp中文用户组)
CLUG http://lisp.org.cn

---
您收到此邮件是因为您订阅了 Google 网上论坛的“Lisp-cn(Lisp中文用户组)”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 lisp-cn+***@googlegroups.com。
要查看更多选项,请访问 https://groups.google.com/groups/o
freegih
2014-02-25 15:45:07 UTC
Permalink
our-setq 定义为宏就可以这么写啦:
(our-setq (a 1) (b 2))
Post by 宋为@凉拌茶叶
我希望定义一个宏可以提供语法将
(setq a 1 b 2 c 3)
改成:
(our-setq (a 1) (b 2) (c 3))
然后我发现事情好像不太科学,(a 1)这样的格式会直接被理解成函数调用然后爆掉……
想了一下意识到这样倒是可以:
(our-setq '(a 1) '(b 2) '(c 3))
但这样我就觉得Common Lisp的宏功能特别有限了,比较惆怅。
我期待宏能够给予我任意定义语法的能力,是我理解有问题么?
--
--
Lisp-cn(Lisp中文用户组)
CLUG http://lisp.org.cn
--- 您收到此邮件是因为您订阅了 Google 网上论坛的“Lisp-cn(Lisp中文用户组)”论坛。
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp中文用户组)
CLUG http://lisp.org.cn

---
您收到此邮件是因为您订阅了 Google 网上论坛的“Lisp-cn(Lisp中文用户组)”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 lisp-cn+***@googlegroups.com。
要查看更多选项,请访问 https://groups.google.com/
蒋文佼
2014-02-26 03:11:01 UTC
Permalink
žøžöÀý×Ó£º

(defmacro for (var start stop &body body)
(let ((gstop (gensym)))
`(do ((,var ,start (1+ ,var))
(,gstop ,stop))
((> ,var ,gstop))
(for x 1 8
(princ x))12345678NIL
(our-setq (a 1) (b 2))
ÎÒÏ£Íû¶šÒåÒ»žöºê¿ÉÒÔÌṩÓï·šœ«
(setq a 1 b 2 c 3)
žÄ³É£º
(our-setq (a 1) (b 2) (c 3))
È»ºóÎÒ·¢ÏÖÊÂÇéºÃÏñ²»Ì«¿Æѧ£¬(a 1)ÕâÑùµÄžñÊœ»áÖ±œÓ±»Àíœâ³Éº¯Êýµ÷ÓÃÈ»ºó±¬µô¡­¡­
ÏëÁËÒ»ÏÂÒâʶµœÕâÑùµ¹ÊÇ¿ÉÒÔ£º
(our-setq '(a 1) '(b 2) '(c 3))
µ«ÕâÑùÎÒŸÍŸõµÃCommon LispµÄºê¹ŠÄÜÌرðÓÐÏÞÁË£¬±ÈœÏã°âê¡£
ÎÒÆÚŽýºêÄܹ»žøÓèÎÒÈÎÒ⶚ÒåÓï·šµÄÄÜÁŠ£¬ÊÇÎÒÀíœâÓÐÎÊÌâÃŽ£¿
--
--
Lisp-cn(LispÖÐÎÄÓû§×é)
CLUG http://lisp.org.cn
--- ÄúÊÕµœŽËÓÊŒþÊÇÒòΪÄú¶©ÔÄÁË Google ÍøÉÏÂÛ̳µÄ¡°Lisp-cn(LispÖÐÎÄÓû§×é)¡±ÂÛ̳¡£
Òª²é¿Žžü¶àÑ¡ÏÇë·ÃÎÊ https://groups.google.com/groups/opt_out¡£
--
--
Lisp-cn(LispÖÐÎÄÓû§×é)
CLUG http://lisp.org.cn
---
ÄúÊÕµœŽËÓÊŒþÊÇÒòΪÄú¶©ÔÄÁË Google ÍøÉÏÂÛ̳µÄ¡°Lisp-cn(LispÖÐÎÄÓû§×é)¡±ÂÛ̳¡£
Òª²é¿Žžü¶àÑ¡ÏÇë·ÃÎÊ https://groups.google.com/groups/opt_out¡£
--
--
Lisp-cn(LispÖÐÎÄÓû§×é)
CLUG http://lisp.org.cn

---
ÄúÊÕµœŽËÓÊŒþÊÇÒòΪÄú¶©ÔÄÁË Google ÍøÉÏÂÛ̳µÄ¡°Lisp-cn(LispÖÐÎÄÓû§×é)¡±ÂÛ̳¡£
ÒªÍ˶©ŽËÂÛ̳²¢Í£Ö¹œÓÊÕŽËÂÛ̳µÄµç×ÓÓÊŒþ£¬Çë·¢Ë͵ç×ÓÓÊŒþµœ lisp-cn+***@googlegroups.com¡£
Òª²é¿Žžü¶àÑ¡ÏÇë·ÃÎÊ https://groups.google.com/groups/opt_out¡£
蒋文佼
2014-02-26 03:12:12 UTC
Permalink
ÆäʵŽËŽŠºêºÍº¯ÊýÖŽÐеĜ׶ÎÊDz»Í¬µÄ£¬ËùÒÔûÓÐÎÊÌâ
Post by 蒋文佼
žøžöÀý×Ó£º
(defmacro for (var start stop &body body)
(let ((gstop (gensym)))
`(do ((,var ,start (1+ ,var))
(,gstop ,stop))
((> ,var ,gstop))
(for x 1 8
(princ x))12345678NIL
(our-setq (a 1) (b 2))
ÎÒÏ£Íû¶šÒåÒ»žöºê¿ÉÒÔÌṩÓï·šœ«
(setq a 1 b 2 c 3)
žÄ³É£º
(our-setq (a 1) (b 2) (c 3))
È»ºóÎÒ·¢ÏÖÊÂÇéºÃÏñ²»Ì«¿Æѧ£¬(a 1)ÕâÑùµÄžñÊœ»áÖ±œÓ±»Àíœâ³Éº¯Êýµ÷ÓÃÈ»ºó±¬µô¡­¡­
ÏëÁËÒ»ÏÂÒâʶµœÕâÑùµ¹ÊÇ¿ÉÒÔ£º
(our-setq '(a 1) '(b 2) '(c 3))
µ«ÕâÑùÎÒŸÍŸõµÃCommon LispµÄºê¹ŠÄÜÌرðÓÐÏÞÁË£¬±ÈœÏã°âê¡£
ÎÒÆÚŽýºêÄܹ»žøÓèÎÒÈÎÒ⶚ÒåÓï·šµÄÄÜÁŠ£¬ÊÇÎÒÀíœâÓÐÎÊÌâÃŽ£¿
--
--
Lisp-cn(LispÖÐÎÄÓû§×é)
CLUG http://lisp.org.cn
--- ÄúÊÕµœŽËÓÊŒþÊÇÒòΪÄú¶©ÔÄÁË Google ÍøÉÏÂÛ̳µÄ¡°Lisp-cn(LispÖÐÎÄÓû§×é)¡±ÂÛ̳¡£
Òª²é¿Žžü¶àÑ¡ÏÇë·ÃÎÊ https://groups.google.com/groups/opt_out¡£
--
--
Lisp-cn(LispÖÐÎÄÓû§×é)
CLUG http://lisp.org.cn
---
ÄúÊÕµœŽËÓÊŒþÊÇÒòΪÄú¶©ÔÄÁË Google ÍøÉÏÂÛ̳µÄ¡°Lisp-cn(LispÖÐÎÄÓû§×é)¡±ÂÛ̳¡£
Òª²é¿Žžü¶àÑ¡ÏÇë·ÃÎÊ https://groups.google.com/groups/opt_out¡£
--
--
Lisp-cn(LispÖÐÎÄÓû§×é)
CLUG http://lisp.org.cn

---
ÄúÊÕµœŽËÓÊŒþÊÇÒòΪÄú¶©ÔÄÁË Google ÍøÉÏÂÛ̳µÄ¡°Lisp-cn(LispÖÐÎÄÓû§×é)¡±ÂÛ̳¡£
ÒªÍ˶©ŽËÂÛ̳²¢Í£Ö¹œÓÊÕŽËÂÛ̳µÄµç×ÓÓÊŒþ£¬Çë·¢Ë͵ç×ÓÓÊŒþµœ lisp-cn+***@googlegroups.com¡£
Òª²é¿Žžü¶àÑ¡ÏÇë·ÃÎÊ https://groups.google.com/groups/opt_out¡£
蒋文佼
2014-02-26 05:59:42 UTC
Permalink
ÕâÊÇÎÒµ÷µÄÒ»ÖÖʵÏÖ·œÊœ£º
(defmacro my-set (&rest exprs)
`(eval `,(cons 'setq (apply #'append ',exprs))))

cl»¹ÊDz»Ê죬Èç¹ûŸõµÃÓ×ÖÉ£¬»¹ÇëŒûÁÂ
Post by 蒋文佼
ÆäʵŽËŽŠºêºÍº¯ÊýÖŽÐеĜ׶ÎÊDz»Í¬µÄ£¬ËùÒÔûÓÐÎÊÌâ
žøžöÀý×Ó£º
Post by 蒋文佼
(defmacro for (var start stop &body body)
(let ((gstop (gensym)))
`(do ((,var ,start (1+ ,var))
(,gstop ,stop))
((> ,var ,gstop))
(for x 1 8
(princ x))12345678NIL
(our-setq (a 1) (b 2))
ÎÒÏ£Íû¶šÒåÒ»žöºê¿ÉÒÔÌṩÓï·šœ«
(setq a 1 b 2 c 3)
žÄ³É£º
(our-setq (a 1) (b 2) (c 3))
È»ºóÎÒ·¢ÏÖÊÂÇéºÃÏñ²»Ì«¿Æѧ£¬(a 1)ÕâÑùµÄžñÊœ»áÖ±œÓ±»Àíœâ³Éº¯Êýµ÷ÓÃÈ»ºó±¬µô¡­¡­
ÏëÁËÒ»ÏÂÒâʶµœÕâÑùµ¹ÊÇ¿ÉÒÔ£º
(our-setq '(a 1) '(b 2) '(c 3))
µ«ÕâÑùÎÒŸÍŸõµÃCommon LispµÄºê¹ŠÄÜÌرðÓÐÏÞÁË£¬±ÈœÏã°âê¡£
ÎÒÆÚŽýºêÄܹ»žøÓèÎÒÈÎÒ⶚ÒåÓï·šµÄÄÜÁŠ£¬ÊÇÎÒÀíœâÓÐÎÊÌâÃŽ£¿
--
--
Lisp-cn(LispÖÐÎÄÓû§×é)
CLUG http://lisp.org.cn
--- ÄúÊÕµœŽËÓÊŒþÊÇÒòΪÄú¶©ÔÄÁË Google ÍøÉÏÂÛ̳µÄ¡°Lisp-cn(LispÖÐÎÄÓû§×é)¡±ÂÛ̳¡£
Òª²é¿Žžü¶àÑ¡ÏÇë·ÃÎÊ https://groups.google.com/groups/opt_out¡£
--
--
Lisp-cn(LispÖÐÎÄÓû§×é)
CLUG http://lisp.org.cn
---
ÄúÊÕµœŽËÓÊŒþÊÇÒòΪÄú¶©ÔÄÁË Google ÍøÉÏÂÛ̳µÄ¡°Lisp-cn(LispÖÐÎÄÓû§×é)¡±ÂÛ̳¡£
Òª²é¿Žžü¶àÑ¡ÏÇë·ÃÎÊ https://groups.google.com/groups/opt_out¡£
--
--
Lisp-cn(LispÖÐÎÄÓû§×é)
CLUG http://lisp.org.cn

---
ÄúÊÕµœŽËÓÊŒþÊÇÒòΪÄú¶©ÔÄÁË Google ÍøÉÏÂÛ̳µÄ¡°Lisp-cn(LispÖÐÎÄÓû§×é)¡±ÂÛ̳¡£
ÒªÍ˶©ŽËÂÛ̳²¢Í£Ö¹œÓÊÕŽËÂÛ̳µÄµç×ÓÓÊŒþ£¬Çë·¢Ë͵ç×ÓÓÊŒþµœ lisp-cn+***@googlegroups.com¡£
Òª²é¿Žžü¶àÑ¡ÏÇë·ÃÎÊ https://groups.google.com/groups/opt_out¡£
Xiaofeng Yang
2014-02-26 07:16:59 UTC
Permalink
劂果䜠理解的宏是指defmacro定义出来的话那么是无法定义任䜕语法的它的功胜是埈局限的。

还有䌚被圓成凜数调甚䜠是䞍是把our-setq甹defun进行定义了
我垌望定义䞀䞪宏可以提䟛语法将
(setq a 1 b 2 c 3)
改成
(our-setq (a 1) (b 2) (c 3))
然后我发现事情奜像䞍倪科孊(a 1)这样的栌匏䌚盎接被理解成凜数调甚然后爆掉  
想了䞀䞋意识到这样倒是可以
(our-setq '(a 1) '(b 2) '(c 3))
䜆这样我就觉埗Common Lisp的宏功胜特别有限了比蟃惆怅。
我期埅宏胜借给予我任意定义语法的胜力是我理解有问题么
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn

---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到 lisp-cn+***@googlegroups.com。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
Grecks Grecks
2014-02-26 09:18:54 UTC
Permalink
我垌望定义䞀䞪宏可以提䟛语法将
(setq a 1 b 2 c 3)
改成
(our-setq (a 1) (b 2) (c 3))
然后我发现事情奜像䞍倪科孊(a 1)这样的栌匏䌚盎接被理解成凜数调甚然后爆掉  
想了䞀䞋意识到这样倒是可以
(our-setq '(a 1) '(b 2) '(c 3))
䜆这样我就觉埗Common Lisp的宏功胜特别有限了比蟃惆怅。
我期埅宏胜借给予我任意定义语法的胜力是我理解有问题么
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn

---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到 lisp-cn+***@googlegroups.com。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
宋为@凉拌茶叶
2014-02-26 10:27:10 UTC
Permalink
发生了奇妙的事情,你的代码宏展开看起来完全没有问题,运行起来却死机了
(CPU 100%)
OUR-SETQ
* (macroexpand-1 '(our-setq (a 10) (b 20) (c 30) (d 40)))
(SETQ A 10
B 20
C 30
D 40)
T
* (our-setq (a 10) (b 20) (c 30) (d 40))
(然后死机,CPU被SBCL保持在100% =_=)
Post by 宋为@凉拌茶叶
我希望定义一个宏可以提供语法将
(setq a 1 b 2 c 3)
改成:
(our-setq (a 1) (b 2) (c 3))
然后我发现事情好像不太科学,(a 1)这样的格式会直接被理解成函数调用然后爆掉……
想了一下意识到这样倒是可以:
(our-setq '(a 1) '(b 2) '(c 3))
但这样我就觉得Common Lisp的宏功能特别有限了,比较惆怅。
我期待宏能够给予我任意定义语法的能力,是我理解有问题么?
--
--
Lisp-cn(Lisp中文用户组)
CLUG http://lisp.org.cn
--- 您收到此邮件是因为您订阅了 Google 网上论坛的“Lisp-cn(Lisp中文用户组)”论坛。
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp中文用户组)
CLUG http://lisp.org.cn

---
您收到此邮件是因为您订阅了 Google 网上论坛的“Lisp-cn(Lisp中文用户组)”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 lisp-cn+***@googlegroups.com。
要查看更多选项,请访
宋为@凉拌茶叶
2014-02-26 10:39:11 UTC
Permalink
更奇特的是,同样的输入,CLISP就完全正常
发生了奇妙的事 情,你的代码宏展开看起来完全没有问题,运行起来却死机了
(CPU 100%)
OUR-SETQ
* (macroexpand-1 '(our-setq (a 10) (b 20) (c 30) (d 40)))
(SETQ A 10
B 20
C 30
D 40)
T
* (our-setq (a 10) (b 20) (c 30) (d 40))
(然后死机,CPU被SBCL保持在100% =_=)
Post by 宋为@凉拌茶叶
我希望定义一个宏可以提供语法将
(setq a 1 b 2 c 3)
改成:
(our-setq (a 1) (b 2) (c 3))
然后我发现事情好像不太科学,(a 1)这样的格式会直接被理解成函数调用然
后爆掉……
想了一下意识到这样倒是可以:
(our-setq '(a 1) '(b 2) '(c 3))
但这样我就觉得Common Lisp的宏功能特别有限了,比较惆怅。
我期待宏能够给予我任意定义语法的能力,是我理解有问题么?
--
--
Lisp-cn(Lisp中文用户组)
CLUG http://lisp.org.cn
--- 您收到此邮件是因为您订阅了 Google 网上论坛的“Lisp-cn(Lisp中文用
户组)”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 lisp-
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp中文用户组)
CLUG http://lisp.org.cn

---
您收到此邮件是因为您订阅了 Google 网上论坛的“Lisp-cn(Lisp中文用户组)”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 lisp-cn+***@googlegroups.com。
要查看更多选项,请访问 https://groups.google.com/gro
水里有谁
2014-02-26 16:51:17 UTC
Permalink
我的ccl也完党正垞 。

CL-USER> (setq a 10 b 20 c 30 d 40)
40
CL-USER> a
10
CL-USER> b
20
CL-USER> c
30
CL-USER> d
40


圚 2014幎2月26日星期䞉UTC-5䞊午5时39分11秒凉拌茶叶写道
曎奇特的是同样的蟓入CLISP就完党正垞
发生了奇劙的事 情䜠的代码宏展匀看起来完党没有问题运行起来华死机了
CPU 100%
OUR-SETQ
* (macroexpand-1 '(our-setq (a 10) (b 20) (c 30) (d 40)))
(SETQ A 10
B 20
C 30
D 40)
T
* (our-setq (a 10) (b 20) (c 30) (d 40))
然后死机CPU被SBCL保持圚100% =_=
我垌望定义䞀䞪宏可以提䟛语法将
(setq a 1 b 2 c 3)
改成
(our-setq (a 1) (b 2) (c 3))
然后我发现事情奜像䞍倪科孊(a 1)这样的栌匏䌚盎接被理解成凜数调甚然
后爆掉  
想了䞀䞋意识到这样倒是可以
(our-setq '(a 1) '(b 2) '(c 3))
䜆这样我就觉埗Common Lisp的宏功胜特别有限了比蟃惆怅。
我期埅宏胜借给予我任意定义语法的胜力是我理解有问题么
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚
户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到 lisp-
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn

---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到 lisp-cn+***@googlegroups.com。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
Liutos
2014-02-27 01:35:33 UTC
Permalink
Lisp䞭文瀟区官方矀1萌萌的Liutos酱发来栞电
Post by 水里有谁
我的ccl也完党正垞 。
CL-USER> (setq a 10 b 20 c 30 d 40)
40
CL-USER> a
10
CL-USER> b
20
CL-USER> c
30
CL-USER> d
40
圚 2014幎2月26日星期䞉UTC-5䞊午5时39分11秒凉拌茶叶写道
曎奇特的是同样的蟓入CLISP就完党正垞
发生了奇劙的事 情䜠的代码宏展匀看起来完党没有问题运行起来华死机了
CPU 100%
OUR-SETQ
* (macroexpand-1 '(our-setq (a 10) (b 20) (c 30) (d 40)))
(SETQ A 10
B 20
C 30
D 40)
T
* (our-setq (a 10) (b 20) (c 30) (d 40))
然后死机CPU被SBCL保持圚100% =_=
我垌望定义䞀䞪宏可以提䟛语法将
(setq a 1 b 2 c 3)
改成
(our-setq (a 1) (b 2) (c 3))
然后我发现事情奜像䞍倪科孊(a 1)这样的栌匏䌚盎接被理解成凜数调甚然
后爆掉  
想了䞀䞋意识到这样倒是可以
(our-setq '(a 1) '(b 2) '(c 3))
䜆这样我就觉埗Common Lisp的宏功胜特别有限了比蟃惆怅。
我期埅宏胜借给予我任意定义语法的胜力是我理解有问题么
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚
户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到 lisp-
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
Liutos Love Linux LaTeX Lisp Ling

我的GitHub䞻页https://github.com/Liutos
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn

---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到 lisp-cn+***@googlegroups.com。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
Jeova Sanctus Unus
2014-02-27 01:38:17 UTC
Permalink
䞓闚装了䞪sbcl
发来莺电,我这蟹也死了
Post by Liutos
Lisp䞭文瀟区官方矀1萌萌的Liutos酱发来栞电
我的ccl也完党正垞 。
Post by 水里有谁
CL-USER> (setq a 10 b 20 c 30 d 40)
40
CL-USER> a
10
CL-USER> b
20
CL-USER> c
30
CL-USER> d
40
圚 2014幎2月26日星期䞉UTC-5䞊午5时39分11秒凉拌茶叶写道
曎奇特的是同样的蟓入CLISP就完党正垞
发生了奇劙的事 情䜠的代码宏展匀看起来完党没有问题运行起来华死机了
CPU 100%
OUR-SETQ
* (macroexpand-1 '(our-setq (a 10) (b 20) (c 30) (d 40)))
(SETQ A 10
B 20
C 30
D 40)
T
* (our-setq (a 10) (b 20) (c 30) (d 40))
然后死机CPU被SBCL保持圚100% =_=
我垌望定义䞀䞪宏可以提䟛语法将
(setq a 1 b 2 c 3)
改成
(our-setq (a 1) (b 2) (c 3))
然后我发现事情奜像䞍倪科孊(a 1)这样的栌匏䌚盎接被理解成凜数调甚然
后爆掉  
想了䞀䞋意识到这样倒是可以
(our-setq '(a 1) '(b 2) '(c 3))
䜆这样我就觉埗Common Lisp的宏功胜特别有限了比蟃惆怅。
我期埅宏胜借给予我任意定义语法的胜力是我理解有问题么
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚
户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到 lisp-
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
Liutos Love Linux LaTeX Lisp Ling
我的GitHub䞻页https://github.com/Liutos
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn

---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到 lisp-cn+***@googlegroups.com。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
水里有谁
2014-03-01 01:16:04 UTC
Permalink
Liutos还胜发栞电哊。。。栞电埈有攟射性的。。。dangerous!

圚 2014幎2月26日星期䞉UTC-5䞋午8时35分33秒刘滔写道
Post by Liutos
Lisp䞭文瀟区官方矀1萌萌的Liutos酱发来栞电
Post by 水里有谁
我的ccl也完党正垞 。
CL-USER> (setq a 10 b 20 c 30 d 40)
40
CL-USER> a
10
CL-USER> b
20
CL-USER> c
30
CL-USER> d
40
圚 2014幎2月26日星期䞉UTC-5䞊午5时39分11秒凉拌茶叶写道
曎奇特的是同样的蟓入CLISP就完党正垞
发生了奇劙的事 情䜠的代码宏展匀看起来完党没有问题运行起来华死机了
CPU 100%
OUR-SETQ
* (macroexpand-1 '(our-setq (a 10) (b 20) (c 30) (d 40)))
(SETQ A 10
B 20
C 30
D 40)
T
* (our-setq (a 10) (b 20) (c 30) (d 40))
然后死机CPU被SBCL保持圚100% =_=
我垌望定义䞀䞪宏可以提䟛语法将
(setq a 1 b 2 c 3)
改成
(our-setq (a 1) (b 2) (c 3))
然后我发现事情奜像䞍倪科孊(a 1)这样的栌匏䌚盎接被理解成凜数调甚然
后爆掉  
想了䞀䞋意识到这样倒是可以
(our-setq '(a 1) '(b 2) '(c 3))
䜆这样我就觉埗Common Lisp的宏功胜特别有限了比蟃惆怅。
我期埅宏胜借给予我任意定义语法的胜力是我理解有问题么
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚
户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到 lisp-
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
Liutos Love Linux LaTeX Lisp Ling
我的GitHub䞻页https://github.com/Liutos
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn

---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到 lisp-cn+***@googlegroups.com。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
Xiaofeng Yang
2014-03-01 01:47:40 UTC
Permalink
把LIUTOS抓起来关起来以后就䞍甚亀电莹了​

Best regards,
Xiaofeng Yang
Post by 水里有谁
Liutos还胜发栞电哊。。。栞电埈有攟射性的。。。dangerous!
圚 2014幎2月26日星期䞉UTC-5䞋午8时35分33秒刘滔写道
Post by Liutos
Lisp䞭文瀟区官方矀1萌萌的Liutos酱发来栞电
Post by 水里有谁
我的ccl也完党正垞 。
CL-USER> (setq a 10 b 20 c 30 d 40)
40
CL-USER> a
10
CL-USER> b
20
CL-USER> c
30
CL-USER> d
40
圚 2014幎2月26日星期䞉UTC-5䞊午5时39分11秒凉拌茶叶写道
曎奇特的是同样的蟓入CLISP就完党正垞
发生了奇劙的事 情䜠的代码宏展匀看起来完党没有问题运行起来华死机了
CPU 100%
OUR-SETQ
* (macroexpand-1 '(our-setq (a 10) (b 20) (c 30) (d 40)))
(SETQ A 10
B 20
C 30
D 40)
T
* (our-setq (a 10) (b 20) (c 30) (d 40))
然后死机CPU被SBCL保持圚100% =_=
我垌望定义䞀䞪宏可以提䟛语法将
(setq a 1 b 2 c 3)
改成
(our-setq (a 1) (b 2) (c 3))
然后我发现事情奜像䞍倪科孊(a 1)这样的栌匏䌚盎接被理解成凜数调甚然
后爆掉  
想了䞀䞋意识到这样倒是可以
(our-setq '(a 1) '(b 2) '(c 3))
䜆这样我就觉埗Common Lisp的宏功胜特别有限了比蟃惆怅。
我期埅宏胜借给予我任意定义语法的胜力是我理解有问题么
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚
户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到 lisp-
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
Liutos Love Linux LaTeX Lisp Ling
我的GitHub䞻页https://github.com/Liutos
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn

---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到 lisp-cn+***@googlegroups.com。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
宋为@凉拌茶叶
2014-03-01 07:01:55 UTC
Permalink
肿么就开始卖萌了
把LIUTOS抓起来关起来,以后就不用交电费了!​
Best regards,
Xiaofeng Yang
Liutos还能发核电哦。。。核电很有放射性的。。。dangerous!
在 2014年2月26日星期三UTC-5下午8时35分33秒,刘滔写道:
Lisp中文社区官方群1,萌萌的Liutos酱发来核电!
我的ccl也完全正常 。
CL-USER> (setq a 10 b 20 c 30 d 40)
40
CL-USER> a
10
CL-USER> b
20
CL-USER> c
30
CL-USER> d
40
在 2014年2月26日星期三UTC-5上午5时39分11秒,凉拌茶叶写道:
Post by 宋为@凉拌茶叶
更奇特的是,同样的输入,CLISP就完全正常
发生了奇妙的事 情,你的代码宏展开看起来完全没有问题,运行起来却死机了
(CPU 100%)
OUR-SETQ
* (macroexpand-1 '(our-setq (a 10) (b 20) (c 30) (d 40)))
(SETQ A 10
B 20
C 30
D 40)
T
* (our-setq (a 10) (b 20) (c 30) (d 40))
(然后死机,CPU被SBCL保持在100% =_=)
Post by 宋为@凉拌茶叶
我希望定义一个宏可以提供语法将
(setq a 1 b 2 c 3)
改成:
(our-setq (a 1) (b 2) (c 3))
然后我发现事情好像不太科学,(a 1)这样的格式会直接被理解成函数调用然
后爆掉……
想了一下意识到这样倒是可以:
(our-setq '(a 1) '(b 2) '(c 3))
但这样我就觉得Common Lisp的宏功能特别有限了,比较惆怅。
我期待宏能够给予我任意定义语法的能力,是我理解有问题么?
--
--
Lisp-cn(Lisp中文用户组)
CLUG http://lisp.org.cn
--- 您收到此邮件是因为您订阅了 Google 网上论坛的“Lisp-cn(Lisp中文用
户组)”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 lisp-
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp中文用户组)
CLUG http://lisp.org.cn
---
您收到此邮件是因为您订阅了 Google 网上论坛的“Lisp-cn(Lisp中文用户组)”论坛。
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
--
Liutos Love Linux LaTeX Lisp Ling
我的GitHub主页:https://github.com/Liutos
--
--
Lisp-cn(Lisp中文用户组)
CLUG http://lisp.org.cn
---
您收到此邮件是因为您订阅了 Google 网上论坛的“Lisp-cn(Lisp中文用户组)”论坛。
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp中文用户组)
CLUG http://lisp.org.cn

---
您收到此邮件是因为您订阅了 Google 网上论坛的“Lisp-cn(Lisp中文用户组)”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 lisp-cn+***@googlegroups.com。
要查看更多选项,�
Xiaofeng Yang
2014-03-01 09:29:18 UTC
Permalink
䜠们郜䞍讚论了......唉..​

Best regards,
Xiaofeng Yang
肿么就匀始卖萌了
把LIUTOS抓起来关起来以后就䞍甚亀电莹了​
Post by Xiaofeng Yang
Best regards,
Xiaofeng Yang
Liutos还胜发栞电哊。。。栞电埈有攟射性的。。。dangerous!
Post by 水里有谁
圚 2014幎2月26日星期䞉UTC-5䞋午8时35分33秒刘滔写道
Post by Liutos
Lisp䞭文瀟区官方矀1萌萌的Liutos酱发来栞电
我的ccl也完党正垞 。
Post by 水里有谁
CL-USER> (setq a 10 b 20 c 30 d 40)
40
CL-USER> a
10
CL-USER> b
20
CL-USER> c
30
CL-USER> d
40
圚 2014幎2月26日星期䞉UTC-5䞊午5时39分11秒凉拌茶叶写道
曎奇特的是同样的蟓入CLISP就完党正垞
发生了奇劙的事 情䜠的代码宏展匀看起来完党没有问题运行起来华死机了
CPU 100%
OUR-SETQ
* (macroexpand-1 '(our-setq (a 10) (b 20) (c 30) (d 40)))
(SETQ A 10
B 20
C 30
D 40)
T
* (our-setq (a 10) (b 20) (c 30) (d 40))
然后死机CPU被SBCL保持圚100% =_=
我垌望定义䞀䞪宏可以提䟛语法将
(setq a 1 b 2 c 3)
改成
(our-setq (a 1) (b 2) (c 3))
然后我发现事情奜像䞍倪科孊(a 1)这样的栌匏䌚盎接被理解成凜数调甚然
后爆掉  
想了䞀䞋意识到这样倒是可以
(our-setq '(a 1) '(b 2) '(c 3))
䜆这样我就觉埗Common Lisp的宏功胜特别有限了比蟃惆怅。
我期埅宏胜借给予我任意定义语法的胜力是我理解有问题么
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚
户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到 lisp-
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
Liutos Love Linux LaTeX Lisp Ling
我的GitHub䞻页https://github.com/Liutos
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn

---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到 lisp-cn+***@googlegroups.com。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
Xiaofeng Yang
2014-02-27 04:30:30 UTC
Permalink
蜬自QQ矀

䜿甚mapcon​来修改参数本来就是危险的行䞺。而这䞪行䞺也富臎了这里的死埪环。

SBCL䌚把our-setq展匀最起码䞀次第二次就挂掉了这䞀次郜䌠入盞同的参数对象。
第䞀次䜿甚macroexpand来展匀这时䌠入的是原始参数。䜆是圚调甚our-setq的过皋䞭吧参数对象给改了。
第二次展匀䜿甚的是SB-C::CAREFUL-EXPAND-MACRO来展匀这时䌠入的还是原始参数对象䜆是由于第䞀次our-setq把这些对象改了所以实际䞊䌠入的是修改过的参数了于是圚our-setq里面的mapcon的过皋䞭产生了䞀䞪埪环铟衚这富臎了sb-kernel:%last1的调甚氞远无法结束死埪环。




Best regards,
Xiaofeng Yang
曎奇特的是同样的蟓入CLISP就完党正垞
发生了奇劙的事 情䜠的代码宏展匀看起来完党没有问题运行起来华死机了 CPU 100%
OUR-SETQ
* (macroexpand-1 '(our-setq (a 10) (b 20) (c 30) (d 40)))
(SETQ A 10
B 20
C 30
D 40)
T
* (our-setq (a 10) (b 20) (c 30) (d 40))
然后死机CPU被SBCL保持圚100% =_=
我垌望定义䞀䞪宏可以提䟛语法将
(setq a 1 b 2 c 3)
改成
(our-setq (a 1) (b 2) (c 3))
然后我发现事情奜像䞍倪科孊(a 1)这样的栌匏䌚盎接被理解成凜数调甚然 后爆掉  
想了䞀䞋意识到这样倒是可以
(our-setq '(a 1) '(b 2) '(c 3))
䜆这样我就觉埗Common Lisp的宏功胜特别有限了比蟃惆怅。
我期埅宏胜借给予我任意定义语法的胜力是我理解有问题么
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚 户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn

---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到 lisp-cn+***@googlegroups.com。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
Grecks Grecks
2014-02-27 05:15:53 UTC
Permalink
对的。对rest甹mapcon埈危险。on lisp里有讲到过。
Post by Xiaofeng Yang
蜬自QQ矀
䜿甚mapcon​来修改参数本来就是危险的行䞺。而这䞪行䞺也富臎了这里的死埪环。
SBCL䌚把our-setq展匀最起码䞀次第二次就挂掉了这䞀次郜䌠入盞同的参数对象。
第䞀次䜿甚macroexpand来展匀这时䌠入的是原始参数。䜆是圚调甚our-setq的过皋䞭吧参数对象给改了。
第二次展匀䜿甚的是SB-C::CAREFUL-EXPAND-MACRO来展匀这时䌠入的还是原始参数对象䜆是由于第䞀次our-setq把这些对象改了所以实际䞊䌠入的是修改过的参数了于是圚our-setq里面的mapcon的过皋䞭产生了䞀䞪埪环铟衚这富臎了sb-kernel:%last1的调甚氞远无法结束死埪环。
Best regards,
Xiaofeng Yang
曎奇特的是同样的蟓入CLISP就完党正垞
发生了奇劙的事 情䜠的代码宏展匀看起来完党没有问题运行起来华死机了 CPU 100%
OUR-SETQ
* (macroexpand-1 '(our-setq (a 10) (b 20) (c 30) (d 40)))
(SETQ A 10
B 20
C 30
D 40)
T
* (our-setq (a 10) (b 20) (c 30) (d 40))
然后死机CPU被SBCL保持圚100% =_=
我垌望定义䞀䞪宏可以提䟛语法将
(setq a 1 b 2 c 3)
改成
(our-setq (a 1) (b 2) (c 3))
然后我发现事情奜像䞍倪科孊(a 1)这样的栌匏䌚盎接被理解成凜数调甚然 后爆掉  
想了䞀䞋意识到这样倒是可以
(our-setq '(a 1) '(b 2) '(c 3))
䜆这样我就觉埗Common Lisp的宏功胜特别有限了比蟃惆怅。
我期埅宏胜借给予我任意定义语法的胜力是我理解有问题么
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚 户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn

---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到 lisp-cn+***@googlegroups.com。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
Xiaofeng Yang
2014-02-28 09:48:05 UTC
Permalink
其实这䞪问题是这样的我们来诎诎䞺什么䌚被重倍展匀。
銖先从现象看埗出这是圚REPL里面执行的(our-setq ...)。泚意这䞀执行问题就来了。
SBCL銖先䞍管䞉䞃二十䞀先macroexpand展匀写死的尌玛这也讞是䞪bug这䞪芁根据圓前的*macroexpand-hook*来展匀的回倎问问然后看到䜠这䞪展匀后是(setq
..于是就进行了猖译圚猖译的过皋䞭它第二次调甚了这䞪our-setq。这䞪bug被4幎前被报告记圕圚这里
https://bugs.launchpad.net/sbcl/+bug/541584
圓然二次展匀是可以避免的。想芁避免第二次展匀䜠可以返回比方诎(quote
...)这样就䞍䌚觊发猖译条件想芁避免第䞀次展匀那么䜠可以比方诎(compile-file
...䞀䞋这样第䞀次展匀就䞍䌚被觊发执行的方匏䞍同。

而mapcon富臎的问题其实是(a 10) (b 20) ...这几䞪对象被修改。这里关键圚这句话
The consequences are undefined if a macro function destructively modifies
any part of its form argument.
来自http://www.lispworks.com/documentation/HyperSpec/Body/03_ababb.htm
既然䜠改了SBCL没像vczh那样给䜠䞪随机结果䜠就应该埈高兎了。




Best regards,
Xiaofeng Yang
Post by Grecks Grecks
对的。对rest甹mapcon埈危险。on lisp里有讲到过。
Post by Xiaofeng Yang
蜬自QQ矀
䜿甚mapcon​来修改参数本来就是危险的行䞺。而这䞪行䞺也富臎了这里的死埪环。
SBCL䌚把our-setq展匀最起码䞀次第二次就挂掉了这䞀次郜䌠入盞同的参数对象。
第䞀次䜿甚macroexpand来展匀这时䌠入的是原始参数。䜆是圚调甚our-setq的过皋䞭吧参数对象给改了。
第二次展匀䜿甚的是SB-C::CAREFUL-EXPAND-MACRO来展匀这时䌠入的还是原始参数对象䜆是由于第䞀次our-setq把这些对象改了所以实际䞊䌠入的是修改过的参数了于是圚our-setq里面的mapcon的过皋䞭产生了䞀䞪埪环铟衚这富臎了sb-kernel:%last1的调甚氞远无法结束死埪环。
Best regards,
Xiaofeng Yang
曎奇特的是同样的蟓入CLISP就完党正垞
发生了奇劙的事 情䜠的代码宏展匀看起来完党没有问题运行起来华死机了 CPU 100%
OUR-SETQ
* (macroexpand-1 '(our-setq (a 10) (b 20) (c 30) (d 40)))
(SETQ A 10
B 20
C 30
D 40)
T
* (our-setq (a 10) (b 20) (c 30) (d 40))
然后死机CPU被SBCL保持圚100% =_=
我垌望定义䞀䞪宏可以提䟛语法将
(setq a 1 b 2 c 3)
改成
(our-setq (a 1) (b 2) (c 3))
然后我发现事情奜像䞍倪科孊(a 1)这样的栌匏䌚盎接被理解成凜数调甚然 后爆掉  
想了䞀䞋意识到这样倒是可以
(our-setq '(a 1) '(b 2) '(c 3))
䜆这样我就觉埗Common Lisp的宏功胜特别有限了比蟃惆怅。
我期埅宏胜借给予我任意定义语法的胜力是我理解有问题么
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚 户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn

---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到 lisp-cn+***@googlegroups.com。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
Xiaofeng Yang
2014-02-28 09:56:38 UTC
Permalink
Best regards,
Xiaofeng Yang
Post by Xiaofeng Yang
其实这䞪问题是这样的我们来诎诎䞺什么䌚被重倍展匀。
銖先从现象看埗出这是圚REPL里面执行的(our-setq ...)。泚意这䞀执行问题就来了。
SBCL銖先䞍管䞉䞃二十䞀先macroexpand展匀
​​
写死的尌玛这也讞是䞪bug这䞪芁根据圓前的*macroexpand-hook*来展匀的回倎问问然后看到䜠这䞪展匀后是
​​写死的尌玛这也讞是䞪bug这䞪芁根据圓前的*macroexpand-hook*来展匀的回倎问问​=>


(setq ..于是就进行了猖译圚猖译的过皋䞭它第二次调甚了这䞪our-setq。这䞪bug被4幎前被报告记圕圚这里
Post by Xiaofeng Yang
https://bugs.launchpad.net/sbcl/+bug/541584
圓然二次展匀是可以避免的。想芁避免第二次展匀䜠可以返回比方诎(quote
...)这样就䞍䌚觊发猖译条件想芁避免第䞀次展匀那么䜠可以比方诎(compile-file
...䞀䞋这样第䞀次展匀就䞍䌚被觊发执行的方匏䞍同。
而mapcon富臎的问题其实是(a 10) (b 20) ...这几䞪对象被修改。这里关键圚这句话
The consequences are undefined if a macro function destructively modifies
any part of its form argument.
来自http://www.lispworks.com/documentation/HyperSpec/Body/03_ababb.htm
既然䜠改了SBCL没像vczh那样给䜠䞪随机结果䜠就应该埈高兎了。
Best regards,
Xiaofeng Yang
对的。对rest甹mapcon埈危险。on lisp里有讲到过。
Post by Xiaofeng Yang
蜬自QQ矀
䜿甚mapcon​来修改参数本来就是危险的行䞺。而这䞪行䞺也富臎了这里的死埪环。
SBCL䌚把our-setq展匀最起码䞀次第二次就挂掉了这䞀次郜䌠入盞同的参数对象。
第䞀次䜿甚macroexpand来展匀这时䌠入的是原始参数。䜆是圚调甚our-setq的过皋䞭吧参数对象给改了。
第二次展匀䜿甚的是SB-C::CAREFUL-EXPAND-MACRO来展匀这时䌠入的还是原始参数对象䜆是由于第䞀次our-setq把这些对象改了所以实际䞊䌠入的是修改过的参数了于是圚our-setq里面的mapcon的过皋䞭产生了䞀䞪埪环铟衚这富臎了sb-kernel:%last1的调甚氞远无法结束死埪环。
Best regards,
Xiaofeng Yang
曎奇特的是同样的蟓入CLISP就完党正垞
发生了奇劙的事 情䜠的代码宏展匀看起来完党没有问题运行起来华死机了 CPU 100%
OUR-SETQ
* (macroexpand-1 '(our-setq (a 10) (b 20) (c 30) (d 40)))
(SETQ A 10
B 20
C 30
D 40)
T
* (our-setq (a 10) (b 20) (c 30) (d 40))
然后死机CPU被SBCL保持圚100% =_=
我垌望定义䞀䞪宏可以提䟛语法将
(setq a 1 b 2 c 3)
改成
(our-setq (a 1) (b 2) (c 3))
然后我发现事情奜像䞍倪科孊(a 1)这样的栌匏䌚盎接被理解成凜数调甚然 后爆掉  
想了䞀䞋意识到这样倒是可以
(our-setq '(a 1) '(b 2) '(c 3))
䜆这样我就觉埗Common Lisp的宏功胜特别有限了比蟃惆怅。
我期埅宏胜借给予我任意定义语法的胜力是我理解有问题么
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚 户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn

---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到 lisp-cn+***@googlegroups.com。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
Xiaofeng Yang
2014-02-28 09:57:19 UTC
Permalink
Best regards,
Xiaofeng Yang
Post by Xiaofeng Yang
其实这䞪问题是这样的我们来诎诎䞺什么䌚被重倍展匀。
銖先从现象看埗出这是圚REPL里面执行的(our-setq ...)。泚意这䞀执行问题就来了。
SBCL銖先䞍管䞉䞃二十䞀先macroexpand展匀
​​
写死的尌玛这也讞是䞪bug这䞪芁根据圓前的*macroexpand-hook*来展匀的回倎问问然后看到䜠这䞪展匀后是
​​写死的尌玛这也讞是䞪bug这䞪芁根据圓前的*macroexpand-hook*来展匀的回倎问问=> 抱歉我䞀时脑子短路了。​
Post by Xiaofeng Yang
(setq ..于是就进行了猖译圚猖译的过皋䞭它第二次调甚了这䞪our-setq。这䞪bug被4幎前被报告记圕圚这里
https://bugs.launchpad.net/sbcl/+bug/541584
圓然二次展匀是可以避免的。想芁避免第二次展匀䜠可以返回比方诎(quote
...)这样就䞍䌚觊发猖译条件想芁避免第䞀次展匀那么䜠可以比方诎(compile-file
...䞀䞋这样第䞀次展匀就䞍䌚被觊发执行的方匏䞍同。
而mapcon富臎的问题其实是(a 10) (b 20) ...这几䞪对象被修改。这里关键圚这句话
The consequences are undefined if a macro function destructively modifies
any part of its form argument.
来自http://www.lispworks.com/documentation/HyperSpec/Body/03_ababb.htm
既然䜠改了SBCL没像vczh那样给䜠䞪随机结果䜠就应该埈高兎了。
Best regards,
Xiaofeng Yang
对的。对rest甹mapcon埈危险。on lisp里有讲到过。
Post by Xiaofeng Yang
蜬自QQ矀
䜿甚mapcon​来修改参数本来就是危险的行䞺。而这䞪行䞺也富臎了这里的死埪环。
SBCL䌚把our-setq展匀最起码䞀次第二次就挂掉了这䞀次郜䌠入盞同的参数对象。
第䞀次䜿甚macroexpand来展匀这时䌠入的是原始参数。䜆是圚调甚our-setq的过皋䞭吧参数对象给改了。
第二次展匀䜿甚的是SB-C::CAREFUL-EXPAND-MACRO来展匀这时䌠入的还是原始参数对象䜆是由于第䞀次our-setq把这些对象改了所以实际䞊䌠入的是修改过的参数了于是圚our-setq里面的mapcon的过皋䞭产生了䞀䞪埪环铟衚这富臎了sb-kernel:%last1的调甚氞远无法结束死埪环。
Best regards,
Xiaofeng Yang
曎奇特的是同样的蟓入CLISP就完党正垞
发生了奇劙的事 情䜠的代码宏展匀看起来完党没有问题运行起来华死机了 CPU 100%
OUR-SETQ
* (macroexpand-1 '(our-setq (a 10) (b 20) (c 30) (d 40)))
(SETQ A 10
B 20
C 30
D 40)
T
* (our-setq (a 10) (b 20) (c 30) (d 40))
然后死机CPU被SBCL保持圚100% =_=
我垌望定义䞀䞪宏可以提䟛语法将
(setq a 1 b 2 c 3)
改成
(our-setq (a 1) (b 2) (c 3))
然后我发现事情奜像䞍倪科孊(a 1)这样的栌匏䌚盎接被理解成凜数调甚然 后爆掉  
想了䞀䞋意识到这样倒是可以
(our-setq '(a 1) '(b 2) '(c 3))
䜆这样我就觉埗Common Lisp的宏功胜特别有限了比蟃惆怅。
我期埅宏胜借给予我任意定义语法的胜力是我理解有问题么
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚 户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn

---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到 lisp-cn+***@googlegroups.com。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
Xiaofeng Yang
2014-02-28 10:21:54 UTC
Permalink
及倖由于*macroexpand-hook*的存圚宏展匀的时候是通过*macroexpand-hook*来展匀的所以䜠可以乱搞了比方诎对应的macro
function䜠芁调甚倚少次就倚少次想芁䌠什么参数就什么参数想芁返回什么就什么。
*macroexpand-hook*是䞪改起来埈容易的党局变量废话内容可以随䟿写。

Best regards,
Xiaofeng Yang
Post by Xiaofeng Yang
Best regards,
Xiaofeng Yang
Post by Xiaofeng Yang
其实这䞪问题是这样的我们来诎诎䞺什么䌚被重倍展匀。
銖先从现象看埗出这是圚REPL里面执行的(our-setq ...)。泚意这䞀执行问题就来了。
SBCL銖先䞍管䞉䞃二十䞀先macroexpand展匀
​​
写死的尌玛这也讞是䞪bug这䞪芁根据圓前的*macroexpand-hook*来展匀的回倎问问然后看到䜠这䞪展匀后是
​​写死的尌玛这也讞是䞪bug这䞪芁根据圓前的*macroexpand-hook*来展匀的回倎问问=> 抱歉我䞀时脑子短路了。​
Post by Xiaofeng Yang
(setq ..于是就进行了猖译圚猖译的过皋䞭它第二次调甚了这䞪our-setq。这䞪bug被4幎前被报告记圕圚这里
https://bugs.launchpad.net/sbcl/+bug/541584
圓然二次展匀是可以避免的。想芁避免第二次展匀䜠可以返回比方诎(quote
...)这样就䞍䌚觊发猖译条件想芁避免第䞀次展匀那么䜠可以比方诎(compile-file
...䞀䞋这样第䞀次展匀就䞍䌚被觊发执行的方匏䞍同。
而mapcon富臎的问题其实是(a 10) (b 20) ...这几䞪对象被修改。这里关键圚这句话
The consequences are undefined if a macro function destructively
modifies any part of its form argument.
来自http://www.lispworks.com/documentation/HyperSpec/Body/03_ababb.htm
既然䜠改了SBCL没像vczh那样给䜠䞪随机结果䜠就应该埈高兎了。
Best regards,
Xiaofeng Yang
对的。对rest甹mapcon埈危险。on lisp里有讲到过。
Post by Xiaofeng Yang
蜬自QQ矀
䜿甚mapcon​来修改参数本来就是危险的行䞺。而这䞪行䞺也富臎了这里的死埪环。
SBCL䌚把our-setq展匀最起码䞀次第二次就挂掉了这䞀次郜䌠入盞同的参数对象。
第䞀次䜿甚macroexpand来展匀这时䌠入的是原始参数。䜆是圚调甚our-setq的过皋䞭吧参数对象给改了。
第二次展匀䜿甚的是SB-C::CAREFUL-EXPAND-MACRO来展匀这时䌠入的还是原始参数对象䜆是由于第䞀次our-setq把这些对象改了所以实际䞊䌠入的是修改过的参数了于是圚our-setq里面的mapcon的过皋䞭产生了䞀䞪埪环铟衚这富臎了sb-kernel:%last1的调甚氞远无法结束死埪环。
Best regards,
Xiaofeng Yang
曎奇特的是同样的蟓入CLISP就完党正垞
发生了奇劙的事 情䜠的代码宏展匀看起来完党没有问题运行起来华死机了 CPU 100%
OUR-SETQ
* (macroexpand-1 '(our-setq (a 10) (b 20) (c 30) (d 40)))
(SETQ A 10
B 20
C 30
D 40)
T
* (our-setq (a 10) (b 20) (c 30) (d 40))
然后死机CPU被SBCL保持圚100% =_=
我垌望定义䞀䞪宏可以提䟛语法将
(setq a 1 b 2 c 3)
改成
(our-setq (a 1) (b 2) (c 3))
然后我发现事情奜像䞍倪科孊(a 1)这样的栌匏䌚盎接被理解成凜数调甚然 后爆掉  
想了䞀䞋意识到这样倒是可以
(our-setq '(a 1) '(b 2) '(c 3))
䜆这样我就觉埗Common Lisp的宏功胜特别有限了比蟃惆怅。
我期埅宏胜借给予我任意定义语法的胜力是我理解有问题么
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚 户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn

---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到 lisp-cn+***@googlegroups.com。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
宋为@凉拌茶叶
2014-03-02 11:04:43 UTC
Permalink
有没有标题如《/The /dark side/ of the Common Lisp /Force//》(我虚构 出来
的标题)之类的介绍Common Lisp阴暗角落的小册子?

:D
另外,由于*macroexpand-hook*的存在,宏展开的时候是通过*macroexpand-hook*来展开的,所以你可以乱搞了,比方说,对应的macro
function你要调用多少次就多少次,想要传什么参数就什么参数,想要返回什么就什么。
*macroexpand-hook*是个改起来很容易的全局变量(废话),内容可以随便写。
Best regards,
Xiaofeng Yang
Post by Xiaofeng Yang
Best regards,
Xiaofeng Yang
其实这个问题是这样的,我们来说说为什么会被重复展开。
首先,从现象看得出,这是在REPL里面执行的(our-setq ...)。注意,这一执行,问题就来了。
SBCL首先不管三七二十一先macroexpand展开
​​
(写死的,尼玛,这也许是个bug,这个要根据当前的*macroexpand-hook*来展开的,回头问问),然后,看到你这个展开后是
​​(写死的,尼玛,这也许是个bug,这个要根据当前的*macroexpand-hook*来展开的,回头问问)=> 抱歉,我一时脑子短路了。​
(setq ..,于是,就进行了编译,在编译的过程中,它第二次调用了这个our-setq。这个bug被4年前被报告,记录在这里:
https://bugs.launchpad.net/sbcl/+bug/541584
当然,二次展开是可以避免的。想要避免第二次展开,你可以返回比方说(quote
...),这样就不会触发编译条件;想要避免第一次展开,那么你可以比方说(compile-file
...一下,这样第一次展开就不会被触发(执行的方式不同)。
而mapcon导致的问题其实是(a 10) (b 20) ...这几个对象被修改。这里关键在这句话:
The consequences are undefined if a macro function destructively
modifies any part of its form argument.
来自:http://www.lispworks.com/documentation/HyperSpec/Body/03_ababb.htm
既然你改了,SBCL没像vczh那样给你个随机结果你就应该很高兴了。
Best regards,
Xiaofeng Yang
对的。对rest用mapcon很危险。on lisp里有讲到过。
Post by 宋为@凉拌茶叶
(转自QQ群)
使用mapcon​来修改参数,本来就是危险的行为。而这个行为,也导致了这里的死循环。
SBCL会把our-setq展开最起码两次(第二次就挂掉了),这两次都传入相同的参数对象。
第一次使用macroexpand来展开,这时传入的是原始参数。但是在调用our-setq的过程中,吧参数对象给改了。
第二次展开使用的是SB-C::CAREFUL-EXPAND-MACRO来展开,这时传入的还是原始参数对象,但是由于第一次our-setq把这些对象改了,所以实际上传入的是修改过的参数了,于是在our-setq里面的mapcon的过程中,产生了一个循环链表,这导致了sb-kernel:%last1的调用永远无法结束(死循环)。
Best regards,
Xiaofeng Yang
Post by 宋为@凉拌茶叶
更奇特的是,同样的输入,CLISP就完全正常
发生了奇妙的事 情,你的代码宏展开看起来完全没有问题,运行起来却死机了 (CPU 100%)
OUR-SETQ
* (macroexpand-1 '(our-setq (a 10) (b 20) (c 30) (d 40)))
(SETQ A 10
B 20
C 30
D 40)
T
* (our-setq (a 10) (b 20) (c 30) (d 40))
(然后死机,CPU被SBCL保持在100% =_=)
我希望定义一个宏可以提供语法将
(setq a 1 b 2 c 3)
改成:
(our-setq (a 1) (b 2) (c 3))
然后我发现事情好像不太科学,(a 1)这样的格式会直接被理解成函数调用然 后爆掉……
想了一下意识到这样倒是可以:
(our-setq '(a 1) '(b 2) '(c 3))
但这样我就觉得Common Lisp的宏功能特别有限了,比较惆怅。
我期待宏能够给予我任意定义语法的能力,是我理解有问题么?
--
--
Lisp-cn(Lisp中文用户组)
CLUG http://lisp.org.cn
--- 您收到此邮件是因为您订阅了 Google 网上论坛的“Lisp-cn(Lisp中文用 户组)”论坛。
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp中文用户组)
CLUG http://lisp.org.cn
--- 您收到此邮件是因为您订阅了 Google 网上论坛的“Lisp-cn(Lisp中文用户组)”论坛。
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp中文用户组)
CLUG http://lisp.org.cn
---
您收到此邮件是因为您订阅了 Google 网上论坛的“Lisp-cn(Lisp中文用户组)”论坛。
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp中文用户组)
CLUG http://lisp.org.cn
---
您收到此邮件是因为您订阅了 Google 网上论坛的“Lisp-cn(Lisp中文用户组)”论坛。
要查看更多选项,请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp中文用户组)
CLUG http://lisp.org.cn

---
您收到此邮件是因为您订阅了 Google 网上论坛的“Lisp-cn(Lisp中文用户组)”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到 lisp-cn+***@googlegroups.com。
要查看更多选项,请访问 https://groups.google.com/g
Xiaofeng Yang
2014-03-02 11:56:50 UTC
Permalink
有啊标准文档、hyperspec郜是最准确诊细的。圓然它䌚以䞭立的语蚀来描述。背完䜠䞀定䌚成䞺䞓家圚孊习的过皋䞭䜠䌚发现CL到倄是坑。标准以倖的教皋看再倚也没甚他们才䞍䌚告诉䜠这么倚䜜者知䞍知道郜是䞪问题呢。
及倖​xah lee也收集了Common Lisp Sucks。及倖还有䞍少䞓闚黑Common Lisp的䞓题页面/站点䞓家云集现圚懒埗回去扟了。
还有听诎有䞀䞪奜去倄
Lisp䞭文瀟区官方矀1
39128390

Best regards,
Xiaofeng Yang
有没有标题劂《/The /dark side/ of the Common Lisp /Force//》我虚构 出来
的标题之类的介绍Common Lisp阎暗角萜的小册子
:D
及倖由于*macroexpand-hook*的存圚宏展匀的时候是通过*macroexpand-hook*
Post by Xiaofeng Yang
来展匀的所以䜠可以乱搞了比方诎对应的macro
function䜠芁调甚倚少次就倚少次想芁䌠什么参数就什么参数想芁返回什么就什么。
*macroexpand-hook*是䞪改起来埈容易的党局变量废话内容可以随䟿写。
Best regards,
Xiaofeng Yang
Post by Xiaofeng Yang
Best regards,
Xiaofeng Yang
其实这䞪问题是这样的我们来诎诎䞺什么䌚被重倍展匀。
Post by Xiaofeng Yang
銖先从现象看埗出这是圚REPL里面执行的(our-setq ...)。泚意这䞀执行问题就来了。
SBCL銖先䞍管䞉䞃二十䞀先macroexpand展匀
​​
写死的尌玛这也讞是䞪bug这䞪芁根据圓前的*macroexpand-hook*来展匀的回倎问问然后看到䜠这䞪展匀后是
​​写死的尌玛这也讞是䞪bug这䞪芁根据圓前的*macroexpand-hook*来展匀的回倎问问=>
抱歉我䞀时脑子短路了。​
(setq ..于是就进行了猖译圚猖译的过皋䞭它第二次调甚了这䞪our-setq。这䞪bug被4幎前被报告记圕圚这里
Post by Xiaofeng Yang
https://bugs.launchpad.net/sbcl/+bug/541584
圓然二次展匀是可以避免的。想芁避免第二次展匀䜠可以返回比方诎(quote
...)这样就䞍䌚觊发猖译条件想芁避免第䞀次展匀那么䜠可以比方诎(compile-file
...䞀䞋这样第䞀次展匀就䞍䌚被觊发执行的方匏䞍同。
而mapcon富臎的问题其实是(a 10) (b 20) ...这几䞪对象被修改。这里关键圚这句话
The consequences are undefined if a macro function destructively
modifies any part of its form argument.
来自http://www.lispworks.com/documentation/HyperSpec/Body/03_ababb.htm
既然䜠改了SBCL没像vczh那样给䜠䞪随机结果䜠就应该埈高兎了。
Best regards,
Xiaofeng Yang
对的。对rest甹mapcon埈危险。on lisp里有讲到过。
Post by Xiaofeng Yang
蜬自QQ矀
Post by Xiaofeng Yang
䜿甚mapcon​来修改参数本来就是危险的行䞺。而这䞪行䞺也富臎了这里的死埪环。
SBCL䌚把our-setq展匀最起码䞀次第二次就挂掉了这䞀次郜䌠入盞同的参数对象。
第䞀次䜿甚macroexpand来展匀这时䌠入的是原始参数。䜆是圚调甚our-setq的过皋䞭吧参数对象给改了。
第二次展匀䜿甚的是SB-C::CAREFUL-EXPAND-MACRO来展匀这时䌠入的还是原始参数对象
䜆是由于第䞀次our-setq把这些对象改了所以实际䞊䌠入的是修改过的参数了于是圚our-
setq里面的mapcon的过皋䞭产生了䞀䞪埪环铟衚这富臎了sb-kernel:%last1的调甚氞远无法结束死埪环。
Best regards,
Xiaofeng Yang
曎奇特的是同样的蟓入CLISP就完党正垞
发生了奇劙的事 情䜠的代码宏展匀看起来完党没有问题运行起来华死机了 CPU 100%
OUR-SETQ
* (macroexpand-1 '(our-setq (a 10) (b 20) (c 30) (d 40)))
(SETQ A 10
B 20
C 30
D 40)
T
* (our-setq (a 10) (b 20) (c 30) (d 40))
然后死机CPU被SBCL保持圚100% =_=
我垌望定义䞀䞪宏可以提䟛语法将
(setq a 1 b 2 c 3)
改成
(our-setq (a 1) (b 2) (c 3))
然后我发现事情奜像䞍倪科孊(a 1)这样的栌匏䌚盎接被理解成凜数调甚然 后爆掉  
想了䞀䞋意识到这样倒是可以
(our-setq '(a 1) '(b 2) '(c 3))
䜆这样我就觉埗Common Lisp的宏功胜特别有限了比蟃惆怅。
我期埅宏胜借给予我任意定义语法的胜力是我理解有问题么
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚 户组)”论坛。
com。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn

---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到 lisp-cn+***@googlegroups.com。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
Grecks Grecks
2014-02-27 03:56:31 UTC
Permalink
具䜓记䞍起来了sbcl倄理&rest参数䌘化的比蟃激进过去有些bug。这里对rest甚了mapcondestructuring
list䌰计和这䞪有关没去看sbcl代码。
发生了奇劙的事情䜠的代码宏展匀看起来完党没有问题运行起来华死机了 CPU 100%
OUR-SETQ
* (macroexpand-1 '(our-setq (a 10) (b 20) (c 30) (d 40)))
(SETQ A 10
B 20
C 30
D 40)
T
* (our-setq (a 10) (b 20) (c 30) (d 40))
然后死机CPU被SBCL保持圚100% =_=
我垌望定义䞀䞪宏可以提䟛语法将
(setq a 1 b 2 c 3)
改成
(our-setq (a 1) (b 2) (c 3))
然后我发现事情奜像䞍倪科孊(a 1)这样的栌匏䌚盎接被理解成凜数调甚然后爆掉  
想了䞀䞋意识到这样倒是可以
(our-setq '(a 1) '(b 2) '(c 3))
䜆这样我就觉埗Common Lisp的宏功胜特别有限了比蟃惆怅。
我期埅宏胜借给予我任意定义语法的胜力是我理解有问题么
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn

---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到 lisp-cn+***@googlegroups.com。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
何蒙召
2014-02-27 06:13:03 UTC
Permalink
(defmacro our-setq (&rest args)
‘(setq ,@(reduce #'append args)))
我是手机打字䜠看䞋反匕号可胜有误。

-----Original Message-----
From: Xiaofeng Yang
Sent: 2/27/2014 12:30
To: lisp-cn
Subject: Re: [Lisp-cn] [CL]有没有可胜写出胜提䟛语法劂(our-setq (a 1) (b 2) (c 3))的宏


蜬自QQ矀




䜿甚mapcon​来修改参数本来就是危险的行䞺。而这䞪行䞺也富臎了这里的死埪环。




SBCL䌚把our-setq展匀最起码䞀次第二次就挂掉了这䞀次郜䌠入盞同的参数对象。

第䞀次䜿甚macroexpand来展匀这时䌠入的是原始参数。䜆是圚调甚our-setq的过皋䞭吧参数对象给改了。

第二次展匀䜿甚的是SB-C::CAREFUL-EXPAND-MACRO来展匀这时䌠入的还是原始参数对象䜆是由于第䞀次our-setq把这些对象改了所以实际䞊䌠入的是修改过的参数了于是圚our-setq里面的mapcon的过皋䞭产生了䞀䞪埪环铟衚这富臎了sb-kernel:%last1的调甚氞远无法结束死埪环。












Best regards,
Xiaofeng Yang



圚 2014幎2月26日 䞋午6:39"宋䞺@凉拌茶叶" <***@126.com>写道

曎奇特的是同样的蟓入CLISP就完党正垞

于 2014幎02月26日 18:27, "宋䞺@凉拌茶叶" 写道:

发生了奇劙的事 情䜠的代码宏展匀看起来完党没有问题运行起来华死机了 CPU 100%



* (defmacro our-setq (&rest args) `(setq ,@(mapcon #'car args)))

OUR-SETQ
* (macroexpand-1 '(our-setq (a 10) (b 20) (c 30) (d 40)))

(SETQ A 10
B 20
C 30
D 40)
T
* (our-setq (a 10) (b 20) (c 30) (d 40))
然后死机CPU被SBCL保持圚100% =_=



于 2014幎02月26日 17:18, Grecks Grecks 写道:

(defmacro our-setq (&rest args) `(setq ,@(mapcon #'car args)))
圚 2014-2-25 PM11:33宋䞺@凉拌茶叶 <***@126.com>写道


我垌望定义䞀䞪宏可以提䟛语法将


(setq a 1 b 2 c 3)

改成

(our-setq (a 1) (b 2) (c 3))

然后我发现事情奜像䞍倪科孊(a 1)这样的栌匏䌚盎接被理解成凜数调甚然 后爆掉  
想了䞀䞋意识到这样倒是可以


(our-setq '(a 1) '(b 2) '(c 3))

䜆这样我就觉埗Common Lisp的宏功胜特别有限了比蟃惆怅。

我期埅宏胜借给予我任意定义语法的胜力是我理解有问题么

--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn

--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚 户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到 lisp- cn+***@googlegroups.com。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。







--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn

--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到 lisp-cn+***@googlegroups.com。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。



--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn

---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到 lisp-cn+***@googlegroups.com。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn

---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到 lisp-cn+***@googlegroups.com。
芁查看曎倚选项请访问 https://groups.google.com/d/optout。
Xiaofeng Yang
2014-03-11 07:59:44 UTC
Permalink
这䞪问题早已挔变成䞺别的问题了。​

Best regards,
Xiaofeng Yang
Post by 何蒙召
(defmacro our-setq (&rest args)
我是手机打字䜠看䞋反匕号可胜有误。
------------------------------
From: Xiaofeng Yang
Sent: 2/27/2014 12:30
To: lisp-cn
Subject: Re: [Lisp-cn] [CL]有没有可胜写出胜提䟛语法劂(our-setq (a 1) (b 2) (c 3))的宏
蜬自QQ矀
䜿甚mapcon​来修改参数本来就是危险的行䞺。而这䞪行䞺也富臎了这里的死埪环。
SBCL䌚把our-setq展匀最起码䞀次第二次就挂掉了这䞀次郜䌠入盞同的参数对象。
第䞀次䜿甚macroexpand来展匀这时䌠入的是原始参数。䜆是圚调甚our-setq的过皋䞭吧参数对象给改了。
第二次展匀䜿甚的是SB-C::CAREFUL-EXPAND-MACRO来展匀这时䌠入的还是原始参数对象䜆是由于第䞀次our-setq把这些对象改了所以实际䞊䌠入的是修改过的参数了于是圚our-setq里面的mapcon的过皋䞭产生了䞀䞪埪环铟衚这富臎了sb-kernel:%last1的调甚氞远无法结束死埪环。
Best regards,
Xiaofeng Yang
曎奇特的是同样的蟓入CLISP就完党正垞
发生了奇劙的事 情䜠的代码宏展匀看起来完党没有问题运行起来华死机了 CPU 100%
OUR-SETQ
* (macroexpand-1 '(our-setq (a 10) (b 20) (c 30) (d 40)))
(SETQ A 10
B 20
C 30
D 40)
T
* (our-setq (a 10) (b 20) (c 30) (d 40))
然后死机CPU被SBCL保持圚100% =_=
我垌望定义䞀䞪宏可以提䟛语法将
(setq a 1 b 2 c 3)
改成
(our-setq (a 1) (b 2) (c 3))
然后我发现事情奜像䞍倪科孊(a 1)这样的栌匏䌚盎接被理解成凜数调甚然 后爆掉  
想了䞀䞋意识到这样倒是可以
(our-setq '(a 1) '(b 2) '(c 3))
䜆这样我就觉埗Common Lisp的宏功胜特别有限了比蟃惆怅。
我期埅宏胜借给予我任意定义语法的胜力是我理解有问题么
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚 户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/groups/opt_out。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了Google眑䞊论坛䞭的“Lisp-cn(Lisp䞭文甚户组)”论坛。
劂需了解曎倚选项请访问https://groups.google.com/d/optout。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn

---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到 lisp-cn+***@googlegroups.com。
芁查看曎倚选项请访问 https://groups.google.com/d/optout。
wsk
2014-03-02 05:31:56 UTC
Permalink
无非就是把宏参数展匀成平坊的列衚
CL-USER> (defmacro our-setq (&rest args)
`(setq ,@(reduce #'append args)))
OUR-SETQ
CL-USER> (let ((a nil) (b nil))
(our-setq (a 1) (b 1))
(list a b))
(1 1)





圚 2014幎2月25日星期二UTC+8䞋午11时33分03秒凉拌茶叶写道
我垌望定义䞀䞪宏可以提䟛语法将
(setq a 1 b 2 c 3)
改成
(our-setq (a 1) (b 2) (c 3))
然后我发现事情奜像䞍倪科孊(a 1)这样的栌匏䌚盎接被理解成凜数调甚然后爆掉  
想了䞀䞋意识到这样倒是可以
(our-setq '(a 1) '(b 2) '(c 3))
䜆这样我就觉埗Common Lisp的宏功胜特别有限了比蟃惆怅。
我期埅宏胜借给予我任意定义语法的胜力是我理解有问题么
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn

---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到 lisp-cn+***@googlegroups.com。
芁查看曎倚选项请访问 https://groups.google.com/d/optout。
宋为@凉拌茶叶
2014-08-10 07:01:16 UTC
Permalink
想问一下,这个过程中,阻止Lisp把(our-setq (a 1) (b 2) (c 3)) 中的a、b、c
视为函数的原理是什么?
我希望定义一个宏 可以提供语法将
(setq a 1 b 2 c 3)
改成:
(our-setq (a 1) (b 2) (c 3))
然后我发现事情好像不太科学,(a 1)这样的格式会直接被理解成函数调用然后
爆掉……
想了一下意识到这样倒是可以:
(our-setq '(a 1) '(b 2) '(c 3))
但这样我就觉得Common Lisp的宏功能特别有限了,比较惆怅。
我期待宏能够给予我任意定义语法的能力,是我理解有问题么?
--
--
Lisp-cn(Lisp中文用户组)
CLUG http://lisp.org.cn

---
您收到此邮件是因为您订阅了 Google 网上论坛的“Lisp-cn(Lisp中文用户组)”论坛。
要退订此论坛并停止接收此论坛的电子邮件,请发送电子邮件到lisp-cn+***@googlegroups.com。
要查看更多选
Xiaofeng Yang
2014-08-11 04:11:50 UTC
Permalink
这䞪问题比蟃倍杂了。䞍过通垞是根据car来刀断圚圓前党局环境䞋是宏还是凜数这䞍代衚诎䜠确实做了这种定义。
(our-setq (a 1) (b 2) (c 3)) 是䞀䞪list里面的our-setq,a,b,c郜是对应list的car。


Best regards,
Xiaofeng Yang
想问䞀䞋这䞪过皋䞭阻止Lisp把(our-setq (a 1) (b 2) (c 3)) 侭的a、b、c 视䞺凜数的原理是什么
我垌望定义䞀䞪宏 可以提䟛语法将
(setq a 1 b 2 c 3)
改成
(our-setq (a 1) (b 2) (c 3))
然后我发现事情奜像䞍倪科孊(a 1)这样的栌匏䌚盎接被理解成凜数调甚然后 爆掉  
想了䞀䞋意识到这样倒是可以
(our-setq '(a 1) '(b 2) '(c 3))
䜆这样我就觉埗Common Lisp的宏功胜特别有限了比蟃惆怅。
我期埅宏胜借给予我任意定义语法的胜力是我理解有问题么
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/d/optout。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn

---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到lisp-cn+***@googlegroups.com。
芁查看曎倚选项请访问 https://groups.google.com/d/optout。
Gin Liu
2014-08-11 08:14:45 UTC
Permalink
圓然可以写, 没有问题. 可以䞍对参数求倌 重新组织, 而䞔这䞪宏也䞍隟写.
Post by Xiaofeng Yang
这䞪问题比蟃倍杂了。䞍过通垞是根据car来刀断圚圓前党局环境䞋是宏还是凜数这䞍代衚诎䜠确实做了这种定义。
(our-setq (a 1) (b 2) (c 3)) 是䞀䞪list里面的our-setq,a,b,c郜是对应list的car。
Best regards,
Xiaofeng Yang
想问䞀䞋这䞪过皋䞭阻止Lisp把(our-setq (a 1) (b 2) (c 3)) 侭的a、b、c 视䞺凜数的原理是什么
我垌望定义䞀䞪宏 可以提䟛语法将
(setq a 1 b 2 c 3)
改成
(our-setq (a 1) (b 2) (c 3))
然后我发现事情奜像䞍倪科孊(a 1)这样的栌匏䌚盎接被理解成凜数调甚然后 爆掉  
想了䞀䞋意识到这样倒是可以
(our-setq '(a 1) '(b 2) '(c 3))
䜆这样我就觉埗Common Lisp的宏功胜特别有限了比蟃惆怅。
我期埅宏胜借给予我任意定义语法的胜力是我理解有问题么
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/d/optout。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了Google眑䞊论坛䞭的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问https://groups.google.com/d/optout。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn

---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到lisp-cn+***@googlegroups.com。
芁查看曎倚选项请访问 https://groups.google.com/d/optout。
Xiaofeng Yang
2014-08-11 09:10:53 UTC
Permalink
其实我早已䞍记埗这䞪坟原先是圚讚论什么的了。。。​

Best regards,
Xiaofeng Yang
Post by Gin Liu
圓然可以写, 没有问题. 可以䞍对参数求倌 重新组织, 而䞔这䞪宏也䞍隟写.
Post by Xiaofeng Yang
这䞪问题比蟃倍杂了。䞍过通垞是根据car来刀断圚圓前党局环境䞋是宏还是凜数这䞍代衚诎䜠确实做了这种定义。
(our-setq (a 1) (b 2) (c 3)) 是䞀䞪list里面的our-setq,a,b,c郜是对应list的car。
Best regards,
Xiaofeng Yang
想问䞀䞋这䞪过皋䞭阻止Lisp把(our-setq (a 1) (b 2) (c 3)) 侭的a、b、c 视䞺凜数的原理是什么
我垌望定义䞀䞪宏 可以提䟛语法将
(setq a 1 b 2 c 3)
改成
(our-setq (a 1) (b 2) (c 3))
然后我发现事情奜像䞍倪科孊(a 1)这样的栌匏䌚盎接被理解成凜数调甚然后 爆掉  
想了䞀䞋意识到这样倒是可以
(our-setq '(a 1) '(b 2) '(c 3))
䜆这样我就觉埗Common Lisp的宏功胜特别有限了比蟃惆怅。
我期埅宏胜借给予我任意定义语法的胜力是我理解有问题么
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/d/optout。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了Google眑䞊论坛䞭的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问https://groups.google.com/d/optout。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了Google眑䞊论坛䞭的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问https://groups.google.com/d/optout。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn

---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到lisp-cn+***@googlegroups.com。
芁查看曎倚选项请访问 https://groups.google.com/d/optout。
Jeova Sanctus Unus
2014-08-12 02:09:07 UTC
Permalink
那就把之前的讚论回顟䞋 我昚倩就倧抂回顟了䞋
Post by Xiaofeng Yang
其实我早已䞍记埗这䞪坟原先是圚讚论什么的了。。。​
Best regards,
Xiaofeng Yang
圓然可以写, 没有问题. 可以䞍对参数求倌 重新组织, 而䞔这䞪宏也䞍隟写.
Post by Xiaofeng Yang
这䞪问题比蟃倍杂了。䞍过通垞是根据car来刀断圚圓前党局环境䞋是宏还是凜数这䞍代衚诎䜠确实做了这种定义。
(our-setq (a 1) (b 2) (c 3)) 是䞀䞪list里面的our-setq,a,b,c郜是对应list的car。
Best regards,
Xiaofeng Yang
想问䞀䞋这䞪过皋䞭阻止Lisp把(our-setq (a 1) (b 2) (c 3)) 侭的a、b、c 视䞺凜数的原理是什么
我垌望定义䞀䞪宏 可以提䟛语法将
(setq a 1 b 2 c 3)
改成
(our-setq (a 1) (b 2) (c 3))
然后我发现事情奜像䞍倪科孊(a 1)这样的栌匏䌚盎接被理解成凜数调甚然后 爆掉  
想了䞀䞋意识到这样倒是可以
(our-setq '(a 1) '(b 2) '(c 3))
䜆这样我就觉埗Common Lisp的宏功胜特别有限了比蟃惆怅。
我期埅宏胜借给予我任意定义语法的胜力是我理解有问题么
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/d/optout。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了Google眑䞊论坛䞭的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问https://groups.google.com/d/optout。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了Google眑䞊论坛䞭的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问https://groups.google.com/d/optout。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了Google眑䞊论坛䞭的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问https://groups.google.com/d/optout。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn

---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到lisp-cn+***@googlegroups.com。
芁查看曎倚选项请访问 https://groups.google.com/d/optout。
Xiaofeng Yang
2014-08-12 04:26:11 UTC
Permalink
晕。。。䜠对CL真是倧爱呀​

Best regards,
Xiaofeng Yang
Post by Jeova Sanctus Unus
那就把之前的讚论回顟䞋 我昚倩就倧抂回顟了䞋
其实我早已䞍记埗这䞪坟原先是圚讚论什么的了。。。​
Post by Xiaofeng Yang
Best regards,
Xiaofeng Yang
圓然可以写, 没有问题. 可以䞍对参数求倌 重新组织, 而䞔这䞪宏也䞍隟写.
Post by Xiaofeng Yang
这䞪问题比蟃倍杂了。䞍过通垞是根据car来刀断圚圓前党局环境䞋是宏还是凜数这䞍代衚诎䜠确实做了这种定义。
(our-setq (a 1) (b 2) (c 3)) 是䞀䞪list里面的our-setq,a,b,c郜是对应list的car。
Best regards,
Xiaofeng Yang
想问䞀䞋这䞪过皋䞭阻止Lisp把(our-setq (a 1) (b 2) (c 3)) 侭的a、b、c 视䞺凜数的原理是什么
我垌望定义䞀䞪宏 可以提䟛语法将
(setq a 1 b 2 c 3)
改成
(our-setq (a 1) (b 2) (c 3))
然后我发现事情奜像䞍倪科孊(a 1)这样的栌匏䌚盎接被理解成凜数调甚然后 爆掉  
想了䞀䞋意识到这样倒是可以
(our-setq '(a 1) '(b 2) '(c 3))
䜆这样我就觉埗Common Lisp的宏功胜特别有限了比蟃惆怅。
我期埅宏胜借给予我任意定义语法的胜力是我理解有问题么
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/d/optout。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了Google眑䞊论坛䞭的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问https://groups.google.com/d/optout。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了Google眑䞊论坛䞭的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问https://groups.google.com/d/optout。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了Google眑䞊论坛䞭的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问https://groups.google.com/d/optout。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了Google眑䞊论坛䞭的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问https://groups.google.com/d/optout。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn

---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到lisp-cn+***@googlegroups.com。
芁查看曎倚选项请访问 https://groups.google.com/d/optout。
Jeova Sanctus Unus
2014-08-13 02:17:37 UTC
Permalink
我是对瀟区有着深深的感情啊
Post by Xiaofeng Yang
晕。。。䜠对CL真是倧爱呀​
Best regards,
Xiaofeng Yang
Post by Jeova Sanctus Unus
那就把之前的讚论回顟䞋 我昚倩就倧抂回顟了䞋
其实我早已䞍记埗这䞪坟原先是圚讚论什么的了。。。​
Post by Xiaofeng Yang
Best regards,
Xiaofeng Yang
圓然可以写, 没有问题. 可以䞍对参数求倌 重新组织, 而䞔这䞪宏也䞍隟写.
Post by Xiaofeng Yang
这䞪问题比蟃倍杂了。䞍过通垞是根据car来刀断圚圓前党局环境䞋是宏还是凜数这䞍代衚诎䜠确实做了这种定义。
(our-setq (a 1) (b 2) (c 3)) 是䞀䞪list里面的our-setq,a,b,c郜是对应list的car。
Best regards,
Xiaofeng Yang
想问䞀䞋这䞪过皋䞭阻止Lisp把(our-setq (a 1) (b 2) (c 3)) 侭的a、b、c 视䞺凜数的原理是什么
我垌望定义䞀䞪宏 可以提䟛语法将
(setq a 1 b 2 c 3)
改成
(our-setq (a 1) (b 2) (c 3))
然后我发现事情奜像䞍倪科孊(a 1)这样的栌匏䌚盎接被理解成凜数调甚然后 爆掉  
想了䞀䞋意识到这样倒是可以
(our-setq '(a 1) '(b 2) '(c 3))
䜆这样我就觉埗Common Lisp的宏功胜特别有限了比蟃惆怅。
我期埅宏胜借给予我任意定义语法的胜力是我理解有问题么
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
--- 悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问 https://groups.google.com/d/optout。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了Google眑䞊论坛䞭的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问https://groups.google.com/d/optout。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了Google眑䞊论坛䞭的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问https://groups.google.com/d/optout。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了Google眑䞊论坛䞭的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问https://groups.google.com/d/optout。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了Google眑䞊论坛䞭的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问https://groups.google.com/d/optout。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn
---
悚收到歀邮件是因䞺悚订阅了Google眑䞊论坛䞭的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁查看曎倚选项请访问https://groups.google.com/d/optout。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn

---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到lisp-cn+***@googlegroups.com。
芁查看曎倚选项请访问 https://groups.google.com/d/optout。
wsk
2014-08-10 08:05:37 UTC
Permalink
宏的参数是吊求倌求倌方法郜可以由䜠自己䞻富

wsk

-----Original Message-----
From: 宋䞺@凉拌茶叶
Sent: 8/10/2014 15:01
To: lisp-***@googlegroups.com
Subject: Re: [Lisp-cn] [CL]有没有可胜写出胜提䟛语法劂(our-setq (a 1) (b 2) (c 3))的宏

想问䞀䞋这䞪过皋䞭阻止Lisp把(our-setq (a 1) (b 2) (c 3)) 侭的a、b、c
视䞺凜数的原理是什么
我垌望定义䞀䞪宏 可以提䟛语法将
(setq a 1 b 2 c 3)
改成
(our-setq (a 1) (b 2) (c 3))
然后我发现事情奜像䞍倪科孊(a 1)这样的栌匏䌚盎接被理解成凜数调甚然后
爆掉  
想了䞀䞋意识到这样倒是可以
(our-setq '(a 1) '(b 2) '(c 3))
䜆这样我就觉埗Common Lisp的宏功胜特别有限了比蟃惆怅。
我期埅宏胜借给予我任意定义语法的胜力是我理解有问题么
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn

---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到lisp-cn+***@googlegroups.com。
芁查看曎倚选项请访问 https://groups.google.com/d/optout。
--
--
Lisp-cn(Lisp䞭文甚户组)
CLUG http://lisp.org.cn

---
悚收到歀邮件是因䞺悚订阅了 Google 眑䞊论坛的“Lisp-cn(Lisp䞭文甚户组)”论坛。
芁退订歀论坛并停止接收歀论坛的电子邮件请发送电子邮件到lisp-cn+***@googlegroups.com。
芁查看曎倚选项请访问 https://groups.google.com/d/optout。
Loading...