(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!的定义,可能我的理解和大家不同,也许大概是个人原因吧,我喜欢这样去理解它。
没有评论:
发表评论