首先,如果在IF
分支之一中只有一個表達式,則不需要使用progn
。 現在,正如你所說的,變量不是用字符串插值的。 對於實際的字符串插值,請參見this answer,但我認爲您應該先嚐試學習一些基本知識。
您可以打印的東西,像這樣:
(if (upstairsp *LOC*)
(progn
(princ "I AM UPSTAIRS IN THE ")
(princ *LOC*))
(progn
(princ "I AM DOWNSTAIRS IN THE ")
(princ *LOC*)))
一般來說,當你發現IF
與PROGN
,有機會,你需要COND
。這裏沒有必要,因爲您在兩個分支中都打印了*LOC*
,並且可以將條件因素排除在外。
(progn
(if (upstairsp *LOC*)
(princ "I AM UPSTAIRS IN THE ")
(princ "I AM DOWNSTAIRS IN THE "))
(princ *LOC*))
但是,您應該使用FORMAT
來代替。 例如:
(if (upstairsp *LOC*)
(format t "I AM UPSTAIRS IN THE ~A" *LOC*)
(format t "I AM DOWNSTAIRS IN THE ~A" *LOC*))
事實上,FORMAT
支持條件指令。 下面的(upstairsp *LOC*)
,一個布爾返回值,在~:[...~;...~]
指令用來選擇文本打印:
(format t
"I AM ~:[DOWNSTAIRS~;UPSTAIRS~] IN THE ~A"
(upstairsp *LOC*)
*LOC*)
有更多的例子來看看A Few Format Recipes(實用的Common Lisp,塞貝爾)。
默認情況下,Common Lisp不會執行字符串插值。可以編寫字符串插值庫,然後使用這些庫。 – Vatine