Биквадратное уравнение - Lisp

Узнай цену своей работы

Формулировка задачи:

Попытался написать Лямбда - Выражение для решения биквадратного уравнения. Вот:
   ((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)
             )
Проверил уже всё, передумал. Выдает ошибку: Warning: Syntactic warning for form SQRT: SQRT assumed special. Что не так с вычислением квадратного корня? Пишу:
((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>

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.417 из 5
Похожие ответы