Lisp等于没有按预期工作

  • 本文关键字:工作 于没 Lisp lisp
  • 更新时间 :
  • 英文 :


我对这种语言越来越熟悉了。但我有个问题。。。我正在研究一个将温度转换为摄氏度或华氏度的函数。我正在传递一个列表(50摄氏度),然后分别处理每种情况。出于某种原因,当我这样做(等于"C"(cadr-lst))时,我得到了NIL。我打印出了列表的cadr,它是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))))
)

我打的电话是

(convert-temp '(30 C))

如果根据注释将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))

如果您真的想比较字符串和符号:

(string= 'c "C")
=> T

但您可能应该将符号与EQ进行比较,或者简单地与一个案例进行比较:

(ecase ...
  (c (c2f ...))
  (f (f2c ...)))

最新更新