对象#f 或#t 不适用
The object #f or #t is not applicable
我正在尝试创建一个函数来获取传入的 3 个数字中较大的 2 个的平方和。(SICP 中的练习 1.3)
当我 运行 以下代码时,出现错误“;对象 #f 不适用。”如果我在我的函数调用中切换 3 和 1,错误消息将显示 #t 而不是 #f.
(define (sumOfSquareOfLargerTwoNumbers a b c) (
cond (
( (and (> (+ a b) (+ a c) ) (> (+ a b) (+ b c) ) ) (+ (square a) (square b) ) )
( (and (> (+ a c) (+ a b) ) (> (+ a c) (+ b c) ) ) (+ (square a) (square c) ) )
( (and (> (+ b c) (+ a b) ) (> (+ b c) (+ a c) ) ) (+ (square b) (square c) ) )
)
))
(sumOfSquareOfLargerTwoNumbers 1 2 3)
我假设适当的条件 return 为真,我会得到两个较大数字的平方。有人可以解释为什么我会收到此错误吗?
cond
前面的括号太多,这是导致问题的原因:
(cond (((and
您的解决方案的正确语法应该是:
(define (sumOfSquareOfLargerTwoNumbers a b c)
(cond ((and (> (+ a b) (+ a c)) (> (+ a b) (+ b c)))
(+ (square a) (square b)))
((and (> (+ a c) (+ a b)) (> (+ a c) (+ b c)))
(+ (square a) (square c)))
((and (> (+ b c) (+ a b)) (> (+ b c) (+ a c)))
(+ (square b) (square c)))))
发生的事情是条件评估为布尔值,意外的括号使它看起来像一个过程应用程序,所以你最终得到这样的东西:
(#t 'something)
当然失败了,因为#t
或#f
不是程序,不能应用。只要小心括号并使用带有语法着色和代码格式的良好 IDE,你就不会再遇到这个问题了。
我正在尝试创建一个函数来获取传入的 3 个数字中较大的 2 个的平方和。(SICP 中的练习 1.3)
当我 运行 以下代码时,出现错误“;对象 #f 不适用。”如果我在我的函数调用中切换 3 和 1,错误消息将显示 #t 而不是 #f.
(define (sumOfSquareOfLargerTwoNumbers a b c) (
cond (
( (and (> (+ a b) (+ a c) ) (> (+ a b) (+ b c) ) ) (+ (square a) (square b) ) )
( (and (> (+ a c) (+ a b) ) (> (+ a c) (+ b c) ) ) (+ (square a) (square c) ) )
( (and (> (+ b c) (+ a b) ) (> (+ b c) (+ a c) ) ) (+ (square b) (square c) ) )
)
))
(sumOfSquareOfLargerTwoNumbers 1 2 3)
我假设适当的条件 return 为真,我会得到两个较大数字的平方。有人可以解释为什么我会收到此错误吗?
cond
前面的括号太多,这是导致问题的原因:
(cond (((and
您的解决方案的正确语法应该是:
(define (sumOfSquareOfLargerTwoNumbers a b c)
(cond ((and (> (+ a b) (+ a c)) (> (+ a b) (+ b c)))
(+ (square a) (square b)))
((and (> (+ a c) (+ a b)) (> (+ a c) (+ b c)))
(+ (square a) (square c)))
((and (> (+ b c) (+ a b)) (> (+ b c) (+ a c)))
(+ (square b) (square c)))))
发生的事情是条件评估为布尔值,意外的括号使它看起来像一个过程应用程序,所以你最终得到这样的东西:
(#t 'something)
当然失败了,因为#t
或#f
不是程序,不能应用。只要小心括号并使用带有语法着色和代码格式的良好 IDE,你就不会再遇到这个问题了。