首页 > 其他 > 详细

scheme lambda表达式 形参

时间:2014-03-11 16:27:20      阅读:384      评论:0      收藏:0      [点我收藏+]

 lambda表达式 
(Lambda (arg1 …) exp1 exp2)
从演算来看,(let ((var value) …) exp1 exp2…) == ((lambda (var …) exp1 exp2 …) value … )
对于Lambda函数的参数
如果形参只有一个,则可以有任意数量的实参,所有实参被格式化为一个list传给函数。
如果形参list是不正常的list的形式,则形参对应的实参被一一映射,而后的实参被格式化成一个list传给.后的形参,这也意味着,实参个数必须保证形参个数。如果形参是一个正常的list,则实参必须被一一映射
因此((lambda (x) x) ‘a) = a 而((lambda x  x) ‘a) = (a)

一次接触Scheme的时候就是先学习的lambda演算,lambda本身就是一个匿名函数,而且 Scheme里面支持匿名函数,可以回顾下当时我的列子,如下: 
(define foo (lambda (x) 
(* x x))) 
Scheme中lambda表达式的形参表有3种接收参数的方式: 
1,定长,这种是最常见的,eg: 
(define square (lambda (n) (* n n))) 
(square 5)=>25 

2,全定长,目前还没想通用处在哪里eg: 
(define foo (lambda x x)) 
(foo 1 2 3)=>(1 2 3) 

3,半定长,这种在很多语言中都有用到,比如C的printf函数eg: 
(define f (lambda (x . y) (* x x))) 
(f 10 20 30)=>100 

通常函数由以下4个部分组成: 
1,前继,n!(fac) 
2,后续,(n-1)!(fac (- n 1)) 
3,测零,(= n 0) 
4,不动点算子,1 
参考:http://www.douban.com/group/topic/7234599/

scheme lambda表达式 形参,布布扣,bubuko.com

scheme lambda表达式 形参

原文:http://www.cnblogs.com/youxin/p/3593630.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!