Lisp等于没有按预期工作

Rya*_*som 1 lisp

我对这种语言越来越熟悉了.但我有一个问题......我正在研究一个将温度转换为celcius或F的函数.我正在传递一个列表(50 C),然后分别处理每个案例.由于某种原因,当我这样做(等于"C"(cadr lst))我得到NIL.I打印出列表的干部,它是C.任何想法?

(defun convert-to-c(num)
    (* (- num 32) 5/9)
)

(defun convert-to-f(num)
    (+ (* num 9/5) 32)
)

(defun convert-temp (lst)
    (cond ((equalp "C" (cadr lst)) (convert-to-f (car lst)))
    (t (convert-to-c (car lst))))
)
Run Code Online (Sandbox Code Playgroud)

我正在打电话

(convert-temp '(30 C))
Run Code Online (Sandbox Code Playgroud)

Sea*_*ean 6

如果你打电话convert-temp(convert-temp '(30 C)),按您的评论,然后(cadr lst)就是C,一个符号,但是你比较它与"C"一个字符串.

所以你需要比较符号convert-temp:(equalp 'C (cadr lst))

或者传入一个字符串: (convert-temp '(30 "C"))

通常会比较符号eq,因此在第一种情况下您可以说(eq 'C (cadr lst)).