码迷,mamicode.com
首页 > 移动开发 > 详细

append构建动态函数

时间:2014-12-11 00:19:06      阅读:181      评论:0      收藏:0      [点我收藏+]

标签:newlisp   append   

append我常用于连接两个string或者list,其实还可以这样用,将两个list连接成一个lambda表达式:

> (append (lambda (x)) ‘((add x 1)))
(lambda (x) (add x 1))

append的第一个参数是(lambda (x)) 一个List,有两个元素,第二个参数也是一个list,子元素也是一个list

拼接后就是变成了一个完整的lambda表达式,接受x为参数,并且能够加1后返回。


进一步考虑, 这里add是写死的,如果现在将(append...)变为某个函数的body,将add作为函数参数传递进来,看看会有什么效果。

> (define (foo op) (append (lambda (x)) (list (list op ‘x 1))))
(lambda (op) (append (lambda (x)) (list (list op ‘x 1))))
> (foo ‘add 2)
(lambda (x) (add x 1))

注意:

1. 这里用list代替了‘, 因为实际使用中我发现 op参数传递会有问题,用list就好

2. foo函数实际上是一个lambda表达式,函数体是(append...)语句,该函数体在运行时会返回(append...)的结果

也就是(lambda (x) (add x 1))


本文标题是动态函数,其实指的就是参数可以是运算符,这里(foo op) 参数op就是可以为‘add, 所以foo就是动态函数

进一步改进之,可以foo可以接受一个参数p:

> (define (foo op p) (append (lambda (x)) (list (list op p ‘x))))
(lambda (op p) (append (lambda (x)) (list (list op p ‘x))))



append构建动态函数

标签:newlisp   append   

原文地址:http://blog.csdn.net/csfreebird/article/details/41855633

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!