DrRacket/Scheme:不是程序

谢尔顿铜

我正在尝试在 Scheme (DrRacket) 中创建程序来求解二次方程的根。我也有解决判别式的功能(功能D)。如果判别式 >0 函数根应该在两个词根的输出“点对”(这是正确的词吗?英语不是我的母语)上具有。否则它应该在输出上给出#f。

(define na2
  (lambda (x)
    (* x x)))

(define D
  (lambda (a b c)
    (- (na2 b) (* 4 a c))))

(define roots
  (lambda (a b c)
    ((if (> (D a b c) 0)
     (cons (/ (+ (- b) (sqrt (D a b c))) (* 2 a)) (/ (- (- b) (sqrt (D a b c))) (* 2 a)))
     #f)))

它给了我这个:

> (roots 1 3 2)
>: contract violation
expected: real?
given: (-1 . -2)
argument position: 1st
other arguments...:
> 

如您所见,输出正确,但为什么会出现错误?

编辑:我更正了错字,因为 Parakram Majumdar 帮助了我,现在它给了我

application: not a procedure;
expected a procedure that can be applied to arguments
given: (-1 . -2)
arguments...: [none]

有人可以告诉我我做错了什么吗?

帕拉克拉姆马朱姆达尔

正如评论中所讨论的,if声明应写成如下:

(if cond then else) 

条件是:

(> (D a b c) 0)

所以总的来说应该是:

(define roots 
    (lambda (a b c) 
            (if (> (D a b c) 0) 
                (cons (/ (+ (- b) (sqrt (D a b c))) (* 2 a)) 
                      (/ (- (- b) (sqrt (D a b c))) (* 2 a))) 
                #f
)))

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章