方案二次函数/平方根检查

时间:2014-03-14 00:38:06

标签: scheme quadratic

我想创建一个函数,其中rootcheck有一个列表L作为输入,L总是3个原子(a b c),其中a是x ^ 2的系数,b的系数是x,c是常数。它使用判别式(b ^ 2 - 4ac)检查方程是否是二次方并且应输出此(num'L),其中num是根数,L是包含根本身的列表(使用二次方程式),L在没有根的情况下是空的。这是我的代码:

(define roots-2
    (lambda (L)
    (let ((d (- (* (cdr L) (cdr L)) (4 (car L) (caddr L))))))
    (cond ((< d 0)  (cons(0 null)))
    ((= d 0) (cons(1 null)))
    (else((> d 0) (cons(2 null)))))
            ))

它在身体错误中没有给我任何表达。

我也尝试编码二次函数,甚至尝试了一些在线,一个编译的fint但在插入输入时给了我一个错误,这是二次函数的代码,而不是MINE!

(define quadratic-solutions
 (lambda (a b c) (list (root1 a b c) (root2 a b c))))
(define root1
 (lambda (a b c) (/ (+ (- b) (sqrt (discriminant a b c)))
 (* 2 a))))
(define root2
 (lambda (a b c) (/ (- (- b) (sqrt (discriminant a b c)))
 (*2 a)))) 
(define discriminant
 (lambda (a b c) (- (square b) (* 4 (* a c)))))

2 个答案:

答案 0 :(得分:3)

代码中有几个错误:

  • 某些括号放置不正确,使用一个好的IDE来检测此类问题。这导致报告错误,let没有正文
  • 您忘了在4ac部分
  • 中成倍增加
  • 您错误地访问了列表中的第二个元素
  • else部分不得有条件
  • 输出列表未正确构建

这应该修复错误,现在将null替换为对第二种和第三种情况计算根的函数的实际调用((< d 0)情况正常):

(define roots-2
  (lambda (L)
    (let ((d (- (* (cadr L) (cadr L)) (* 4 (car L) (caddr L)))))
      (cond ((< d 0)  (list 0 null))
            ((= d 0)  (list 1 null))
            (else     (list 2 null))))))

答案 1 :(得分:0)

对于二次函数部分,我在网上找到了一个代码并对其进行了调整以提供二次方程的根。返回两个根的列表

(define (solve-quadratic-equation a b c)
  (define disc (sqrt (- (* b b)
                    (* 4.0 a c))))

 (list      (/ (+ (- b) disc) (* 2.0 a))
            (/ (- (- b) disc) (* 2.0 a))
))