Macro的写法 `( , ,@ )

本文探讨了Lisp编程语言中宏的使用技巧,包括变量捕捉、控制表达式求值次数及顺序,以及如何定义修改宏等内容。


 

另外的注意点:

  1.  同名符号的 “变量捕捉” (varible capture) 

     解决方式:  with-gensym 生成几个unique name-s, 然后将它们各自绑定上参数值

 2. 多次求值 、 求值顺序

   ①多次求值: 比如参数传进来的某个 s-expression的计算是带有副作用的(求值次数不能多求), 你必须控制它只会被计算一次,  而不能在 `( ) 内出现多次 ,s

   解决方式:   only-one  

   就如上图一样, 把 ,stop先求值一次 并把结果赋给 gstop ,则不会出现多个 ,stop了

   ②求值顺序 :  比如上图中 start , stop 都是有副作用的计算,那就必须保证 start 在 stop 之前求值,不能改变求值顺序。   

3. modify-macro (修改宏)

   比如库中的 incf 这个宏,类似的 第一个参数为目标变量place的 修改, 都得靠 define-modify-macro 来实现。(特征:place是第一个参数、且返回值是修改后的对象)

 


 

转载于:https://www.cnblogs.com/nanlan2017/p/9671953.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值