匿名函数与“有名函数”
scheme中匿名函数使用 lambda 函数实现,格式为:
(lamdba <parameter> <body>)
例如:
(lambda (i) (+ i 3)) ;接受一个参数,返回它与3的和
调用方法为:
> ((lambda (i) (+ i 3)) 2)
5
而有名函数的定义方式和调用方式如下:
(define (<name> <parameter>) ;格式
<body>)
(define (function n) ;例子
(+ n 3))
(function 4) ;调用 function
>7
用匿名函数实现递归
递归是指一个函数调用自身的过程,一般是通过函数名调用,但是匿名函数没有名称,即无法通过函数名直接调用
使用匿名函数实现递归主要通过加入一个参数的方式,例如:
((lambda (fn n fn)) ;接受一个参数10,并把它变为1
(lambda (a f)
(if (= a 1)
a
(f (- a 1) f)))
10)
这个例子挺蠢的:直接接受参数然后返回1就好了,但它是一个完整并且可以运行的匿名函数递归,可以用这个例子理解匿名函数递归的实现方法。下面是一个匿名函数实现斐波那契数列的例子,它能接受一个参数 n ,并返回第n个斐波那契数&#