lisp二次方程虚部和实部

时间:2017-10-15 15:41:43

标签: lisp common-lisp

我正在学习口齿不清,我无法理解这个问题

修改返回二次方程根的函数,使其返回根的实部和虚部,如果是 他们很复杂。假设系数是真实的。

;;;gnu clisp 2.49

(defun root(a b c)
  (let ((root1 (/ (+ (* -1 b) (sqrt (- (expt b 2) (* 4 a c )))) (* 2 a)))
        (root2 (/ (- (* -1 b) (sqrt (- (expt b 2) (* 4 a c )))) (* 2 a))))
    (format t "x1=~,2f" root1)
    (format t ", x2=~,2f~%" root2)))

(root 1 -3 -4)
(root 1 0 -4)
(root 6 11 -35)
(root 1 -7 0)
(root 5 3 5)

我想以x + yi

的形式返回实部和虚部

1 个答案:

答案 0 :(得分:4)

您需要以您喜欢的格式打印complex numbers。 E.g:

(defun number2string (num)
  (if (complexp num)
      (format nil "~,2f + ~,2fi" (realpart num) (imagpart num))
      (format nil "~,2f" num)))

(defun quadratic-roots (a b c)
  (let* ((root1 (/ (+ b (sqrt (- (* b b) (* 4 a c )))) (* -2 a)))
         (root2 (- (- b) root1)))
    (format t "x1=~a, x2=~a" (number2string root1) (number2string root2))
    (values root1 root2)))