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

Scheme 方案二次函数/平方根检查,scheme,quadratic,Scheme,Quadratic,我想做一个函数,其中rootcheck有一个列表L作为输入,L总是3个原子(abc),其中a是x^2的系数,b是x的coef,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))))))

我想做一个函数,其中rootcheck有一个列表L作为输入,L总是3个原子(abc),其中a是x^2的系数,b是x的coef,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)))))
            ))

代码中有几个错误:

  • 有些括号放置不正确,请使用良好的IDE来检测此类问题。这导致报告的错误,
    let
    没有正文
  • 您忘了在
    4ac
    部分乘法
  • 您错误地访问了列表中的第二个元素
  • else
    零件不得有任何状况
  • 输出列表的构造不正确
这将修复错误,现在将
null
替换为对计算第二种和第三种情况下的根的函数的实际调用(
情况就是这样):

(定义根-2
(λ(L)
(让((d(-(((((cadr L)(cadr L)))(*4(cadr L)(cadr L(()))))
(条件((
对于四次函数部分,我在网上找到了一个代码,并对其进行了调整,以提供二次方程的两个根。返回两个根的列表

(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))
))

为什么是CL标签。您也在搜索常见的Lisp答案吗?缩进不好的代码是不可读的。谢谢!!我正在使用DrRacket,有什么建议吗?使用带有频率的“Reindent All”选项,它在Racket菜单中。偶尔做一次“语法检查”,这将帮助您尽早发现错误。编写一小段代码并不断进行测试。让IDE以标准方式引导您,缩进和闭合括号-以上所有内容都将帮助您!
(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))))))
(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))
))