我想创建一个函数,其中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)))))
答案 0 :(得分:3)
代码中有几个错误:
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))
))