If statement 为什么会出现错误:条件:需要一个包含问题和答案的子句

If statement 为什么会出现错误:条件:需要一个包含问题和答案的子句,if-statement,scheme,lisp,racket,If Statement,Scheme,Lisp,Racket,为什么会出现错误:cond:需要一个包含问题和答案的子句,但发现一个只有一部分的子句?我做错了什么 基本上,我必须找出判别式是否为正数/负数 (define (has-real-roots? a b c) (cond [(positive? (- (square b) (* 4 a c)))] [else false])) 它只是你有很多一只手臂,如果没有别的什么要检查,或者我们称之为case,所以我们使用cond。您应该匹配语言语法 #lang racket (cond

为什么会出现错误:
cond:需要一个包含问题和答案的子句,但发现一个只有一部分的子句
?我做错了什么

基本上,我必须找出判别式是否为正数/负数

(define (has-real-roots? a b c)
  (cond
    [(positive? (- (square b) (* 4 a c)))]
    [else false]))

它只是你有很多一只手臂,如果没有别的什么要检查,或者我们称之为
case
,所以我们使用
cond
。您应该匹配语言语法

#lang racket
(cond
    [#false 'you-wont-entry-this-part-because-test-express-is-false]
    [#false 'you-wont-entry-this-part-because-test-express-is-false]
    [#true 'entry-this]
    [else 'last-condiction])

#|
(cond
  [test-express-1 if-test-express-1-is-true-do-this]
  [test-express-2 if-test-express-2-is-true-do-this]
  ...
  [else if-test-express-1-to-n-all-false-do-this])
|#
根据,cond表达式中的每个子句都需要两个部分:“问题”(条件)和“答案”(要返回的值)。您的代码缺少第一个子句的“答案”部分,在这种情况下,返回
true
是合适的:

(define (has-real-roots? a b c)
  (cond [(positive? (- (square b) (* 4 a c))) true]
        [else false]))
但是您实际上不需要在这里使用
cond
,这更简单,并且做同样的事情:

(define (has-real-roots? a b c)
  (positive? (- (* b b) (* 4 a c))))

我猜你不是在使用
#lang racket
而是在使用其他语言。你能介绍一下你用的是什么语言吗?为什么要使用
cond
?与仅将
(正?((*4 a c))
作为主体相比,它提供了什么额外的功能?第三个示例是
[test expr]
结果将是真实值。我不认为OP使用了
#lang racket
我更新了链接,指向学生语言的文档,谢谢你的提示!