小编Cho*_*isu的帖子

Lisp Case语句中的动态变量

我在常见的lisp中编写了这段代码(忽略了......因为在这里粘贴该部分毫无意义).

(case turn 
   (*red-player* ...)
   (*black-player* ...)
   (otherwise ...))
Run Code Online (Sandbox Code Playgroud)

red-playerblack-player是使用defvar语句定义的变量,用于"模拟"C中的#define语句.

(defvar *red-player* 'r)
(defvar *black-player* 'b)
Run Code Online (Sandbox Code Playgroud)

可以想象,当变量turn接收到*red-player*的值('r)或*black-player*'s'('b)时,case语句无法正常工作,因为它期望转换包含*red-player*为文字,而不是变量*red-player*.

我知道我可以使用cond或if + equal语句轻松修复它,因为变量的内容在那里被评估,但我很好奇.也许有一种方法可以在Lisp中创建类似C的宏,或者有某种特殊的case语句允许使用变量而不是文字.

先感谢您!

lisp common-lisp

4
推荐指数
2
解决办法
709
查看次数

标签 统计

common-lisp ×1

lisp ×1