球拍:尝试减去数字,获取列表

Racket: Trying to subtract numbers, getting list

我目前正在学习 Racket/Scheme 一门课程(我不确定有什么区别,实际上,我不确定课程是否涵盖了这些)。我正在尝试一个基本的例子,实现牛顿法来找到一个数字的平方根;但是,我 运行 遇到了求两个数字之间距离的问题。

似乎无论出于何种原因,当我尝试在两个数字之间应用减法运算符时,它 returns 是一个列表。

 #lang racket

(define distance
    (lambda (x y) (
            (print (real? x))
            (print (real? y))
            (abs (- x y))
        )
    )
)

(define abs
    (lambda x (
        (print (list? x))
        (if (< x 0) (- x) x)
        )
    )
)

(distance 2 5)

如您所见,我添加了变量类型的打印,以确保问题确实如我所想,所有这些打印的输出都是 #t。所以:

我仔细检查了文档,我似乎正确地使用了减法运算符;我在 same REPL 中输入了 (- 2 5) 然后 (real? (- 2 5)) 我用来调试我的程序(具体来说是 Dr. Racket),然后我正在获得预期结果(分别为 -3#t)。

有没有哪位法师可以告诉我这是什么魔法?

提前致谢!

这个怎么样...

(define distance
  (lambda (x y)
    (print (real? x))
    (print (real? y))
    (abs (- x y))))


(define abs
  (lambda (x)   ;; instead of (lambda x ...), we are using (lambda (x) ...) form which is more strict in binding with formals
    (print (list? x))
    (if (< x 0) (- x) x)))

进一步了解各种 lambda 形式及其与 formals 的绑定。