为什么我不能在 'cond' 表达式中使用 'and' 作为谓词?

Why can't I use 'and' as the predicate in my 'cond' expression?

我是一名自学成才的软件工程师,他试图通过遵循强烈推荐的 SICP 书籍来填补他们的 CS 知识空白。我在第一个练习中遇到了问题,我很确定这是一个语法问题,但我想不出来。

练习 1.3: 定义一个过程,该过程将三个数字作为参数,returns 两个较大数字的平方和。

#lang sicp

(define (square x) (* x x))

(define (squaresum x y) (+ (square x) (square y)))

(define
  (squaresumlg x y z)
  (cond
    (and (> x z) (> y z)) (squaresum x y)
    (and (> x y) (> z y)) (squaresum x z)
    (and (> y x) (> z x)) (squaresum y z)))

(squaresumlg 1 2 3)

为了运行,我正在使用带有'sicp'包的DrRacket。 and 表达式 运行 本身就很好,但是在 cond 表达式中,我收到错误:

and: bad syntax in: and

谁能告诉我我的程序哪里出错了?如果您有任何关于如何更有效地执行此操作的提示,请告诉我。

您缺少一些括号,cond 中的每个条件都应被 () 括起来。您还遗漏了一个案例,想一想 - 如果两个数字相同会怎样?这应该修复缺少括号的错误:

(define (squaresumlg x y z)
  (cond
    ((and (> x z) (> y z)) (squaresum x y))
    ((and (> x y) (> z y)) (squaresum x z))
    ((and (> y x) (> z x)) (squaresum y z))
    (else (error "oops, you forgot to handle this case!"))))

并且此示例表明您仍然需要计算出边缘情况的逻辑(始终使用 else 子句!)。也许使用 >= 会有帮助?

(squaresumlg 1 1 3)