递归到Y组合子

type
status
date
slug
summary
tags
category
icon
password
前面已经得到一个非递归版本的“递归”求列表长度的函数了。
再次回想一下,一般所需要的递归形式
所以,需要在上面的函数中,将(mk-length mk-length)给想办法替换掉。得到一个如下的版本。
去执行一下代码就能知道,是无法正常工作的,原因就在于:
  • 传进去的length 是由(mk-length mk-length)计算而来。
  • 之前的计算是放在最内层,一旦l满足要求,就不会在内层计算(mk-length mk-length)
  • 现在被抽到外面作为值传入,无法得知函数何时该终止,只能无限计算(mk-length mk-length)
所以,还是需要想办法把这部分操作延迟到内层进行。有个很简单的延迟计算办法,就是将其用lambda裹一层。如下:
这个时候,接受length的lambda已经有通用的感觉了:
接受一个lambda,用接收到的lambda计算下一次递归的条件。
把其提出来
我们甚至可以用define来让其更易懂一点😂
最终,得到了Y组合子。
简单不严谨证明一下:
 
 
Loading...

© XGFan 2012-2025