首页

2009年5月14日星期四

lambda演算


(define fo (lambda(bar) ;lambda=匿名函数

(* bar bar))) ;bar的平方,是它自身乘以自身

(define f1 "B.Hacking") ;定义f1变量,是将“B.Hacking”当作函数参数传给F1

(define f2 #\t) ;#\t代表字符串的意思。

(set! fo #\b) ;重新定义fo,在这样的情况下,使用set!定义fo前面使用define定义的fo 会被set!定义的foo取代掉,就列如C语言里面的指针,当C中的指针指向另一个地址时,前面的指针会被取代掉。在scheme中会被垃圾回收机制自动回收。

(set! fo #\q) ;如果我们另外在重新定义一个字符串,运行看看,结果变化为#\q,而先前的#\b却被替换掉,那么#\b在哪里去了,因为这个#\b已经没用了,也就成为了垃圾数据,这个时候被垃圾回收机制回收。

我真真感受了下Scheme的lambda演算,也是第一次完全明白define与set!的定义,可能我的理解和大家不同,也许大概是个人原因吧,我喜欢这样去理解它。

没有评论:

发表评论