Биквадратное уравнение - Lisp
Формулировка задачи:
Попытался написать Лямбда - Выражение для решения биквадратного уравнения. Вот:
Проверил уже всё, передумал. Выдает ошибку:
Warning: Syntactic warning for form SQRT:
SQRT assumed special.
Что не так с вычислением квадратного корня?
Пишу:
Пытаюсь просто вычислить квадратный корень - опять та же ошибка. Что не так? Что то с синтаксисом?
((lambda (d f) (list (* d d) ;тело функции (* (* -1 d) d) (* f f) (* (* -1 f) f) )) ((lambda (a b c) ;вместо списка параметров два новых Лямбда-вызова (/ (+ (* -1 b) sqrt (- (* b b) (* 4 a c))) (* 2 a))) 2 3 5) ((lambda (a b c) (/ (- (* -1 b) sqrt (- (* b b) (* 4 a c))) (* 2 a))) 2 3 5) )
((lambda (x) (sqrt (x))) 25)
Ну да, синтаксис.
((lambda (d f) (list (* d d) ;тело функции (* (* -1 d) d) (* f f) (* (* -1 f) f) )) ((lambda (a b c) ;вместо списка параметров два новых Лямбда-вызова (/ (+ (* -1 b) (sqrt (- (* b b) (* 4 a c)))) (* 2 a))) 2 3 5) ((lambda (a b c) (/ (- (* -1 b) (sqrt (- (* b b) (* 4 a c)))) (* 2 a))) 2 3 5) )
Решение задачи: «Биквадратное уравнение»
textual
Листинг программы
CL-USER> ((lambda (a b c) (assert (and (numberp a) (numberp b) (numberp c) (/= a 0)) (a b c) "bad arguments: a=~a, b=~b, c=~c" a b c) (let* ((D (- (* b b) (* 4 a c))) ; Дискриминант (d (sqrt D)) ; Корень из дискриминанта ;; Решаем сначала квадратное уравнение (y1 (/ (- (+ b d)) 2 a)) ; Первый корень квадратного уравнения (y2 (/ (- d b) 2 a)) ; Второй корень квадратного уравнения ;; Положительные корни биквадратного уравнения (x1 (sqrt y1)) (x2 (sqrt y2))) ;; Можно вернуть также просто список корней ;; (list -x1 x1 -x2 x2) (values (- x1) x1 (- x2) x2))) 1 -2 1) -1.0 1.0 -1.0 1.0 CL-USER>
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д