球拍:尝试减去数字,获取列表
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
。所以:
- 在调用距离中,x和y都是实数。
- 在调用abs时,x是一个列表。
- 所以,结论是 (- x y) returns 一个列表,但是为什么呢?
我仔细检查了文档,我似乎正确地使用了减法运算符;我在 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
的绑定。
我目前正在学习 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
。所以:
- 在调用距离中,x和y都是实数。
- 在调用abs时,x是一个列表。
- 所以,结论是 (- x y) returns 一个列表,但是为什么呢?
我仔细检查了文档,我似乎正确地使用了减法运算符;我在 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
的绑定。