为什么我不能在 '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)
我是一名自学成才的软件工程师,他试图通过遵循强烈推荐的 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)