Lisp 等于没有按预期工作
Lisp equals not working as expected
我正在慢慢适应这种语言。但我遇到了一个问题......我正在研究一个将温度转换为摄氏度或华氏度的函数。我传入一个这样的列表(50 C),然后分别处理每个案例。出于某种原因,当我这样做时 (equalp "C" (cadr lst)) 我得到 NIL.I 打印出列表的 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))
如果你真的想比较字符串和符号:
(string= 'c "C")
=> T
但您可能应该与 EQ
的符号进行比较,或者简单地与大小写进行比较:
(ecase ...
(c (c2f ...))
(f (f2c ...)))
如果根据您的评论将 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))
.
我正在慢慢适应这种语言。但我遇到了一个问题......我正在研究一个将温度转换为摄氏度或华氏度的函数。我传入一个这样的列表(50 C),然后分别处理每个案例。出于某种原因,当我这样做时 (equalp "C" (cadr lst)) 我得到 NIL.I 打印出列表的 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))
如果你真的想比较字符串和符号:
(string= 'c "C")
=> T
但您可能应该与 EQ
的符号进行比较,或者简单地与大小写进行比较:
(ecase ...
(c (c2f ...))
(f (f2c ...)))
如果根据您的评论将 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))
.