Scheme(DrRacket)用(+ x 1)或lambda替换add1

时间:2017-12-21 13:49:55

标签: scheme racket

我正在从这个页面进行练习 http://www.htdp.org/2003-09-26/Solutions/natnum-list.html

在此代码中

Q_INIT_RESOURCE(*);

我们使用add1预定义函数,这意味着(+ x 1),我想将add1与(+ x 1)或lambda交换。可能吗?如果有,怎么样?

我不想在函数之外写这个。

(define (depth a-dl
(cond
[(symbol? a-dl) 0]
[else (add1 (depth (first a-dl)))]))

左右

(define (add1 x) 
        (+ x 1))

1 个答案:

答案 0 :(得分:1)

add1 意味着(+ x 1),因为x中没有add1

(add1 x) 可以表示(+ x 1),如果这样定义的话。

为了使其具有这个含义,我们将其定义为

(define (add1 x)
        (+  1 x))

或等同于

(define  add1
     (lambda (x)
        (+  1 x)))

这意味着无论add1出现在哪里,(lambda (x) (+ 1 x))都可以出现,效果相同。

当然,写作

( (lambda (x) (+ 1 x)) ....Y.... )

与写作相同

(              + 1     ....Y.... )