相关疑难解决方法(0)

letrec有什么好处?

在阅读"The Seasoned Schemer"时,我开始学习letrec.我理解它的作用(可以用Y-Combinator复制),但本书正在使用它来代替在已define保持静态参数的已经d函数上重复出现.

使用defined函数重复出现的旧函数示例(没什么特别的):

(define (substitute new old l)
  (cond
    ((null? l) '())
    ((eq? (car l) old)
      (cons new (substitute new old (cdr l))))
    (else
      (cons (car l) (substitute new old (cdr l))))))
Run Code Online (Sandbox Code Playgroud)

现在有一个相同功能的例子,但使用letrec:

(define (substitute new old l)
  (letrec
    ((replace
      (lambda (l)
        (cond
          ((null? l) '())
          ((eq? (car l) old)
           (cons new (replace (cdr l))))
          (else
           (cons (car l) (replace (cdr l))))))))
(replace lat)))
Run Code Online (Sandbox Code Playgroud)

除了稍微长一点,更难以阅读之外,我不知道他们为什么要在书中重写函数来使用letrec.通过这种方式在静态变量上重复出现时是否有速度增强,因为你没有继续传递它?

对于具有参数的函数,这种标准实践是保持静态还是减少了一个参数(例如重复列表的元素)?

来自更有经验的Schemers/LISPers的一些意见将有所帮助!

lisp scheme functional-programming racket letrec

17
推荐指数
1
解决办法
7398
查看次数

标签 统计

functional-programming ×1

letrec ×1

lisp ×1

racket ×1

scheme ×1