Scheme 方案二次函数/平方根检查
我想做一个函数,其中rootcheck有一个列表L作为输入,L总是3个原子(abc),其中a是x^2的系数,b是x的coef,c是常数。它使用判别式(b^2-4ac)检查方程是否为二次方程,并应输出此值(num'L),其中num是根数,L是包含根本身的列表(使用二次公式),如果没有根,L为空。这是我的密码: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))))))
(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))
))