如何在lisp中定义这样的常量?

Mar*_*ark 3 python common-lisp

在python中,可以这样做

EMPTY, PAWN, KNIGHT, BISHOP, ROOK, QUEEN, KING, BPAWN = range(8)
Run Code Online (Sandbox Code Playgroud)

你会如何在lisp中做同等的事情?

Rai*_*wig 9

在Lisp中使用符号会更加惯用.通常作为自我评估的关键字符号:

(defparameter *chess-pieces*
  '(:EMPTY :PAWN :KNIGHT :BISHOP :ROOK :QUEEN :KING :BPAWN))
Run Code Online (Sandbox Code Playgroud)

有理由定义数值 - 有时.特别是当你需要与外国功能交谈时.在Lisp中,您默认使用符号.

Common Lisp没有真正的枚举类型.在动态类型语言中使用符号与使用数字变量相比具有一些优势.例如,在调试期间,变量内容更具描述性:

相比:

> (setf c4 queen)

> c4
6
Run Code Online (Sandbox Code Playgroud)

> (setf c4 :queen)

> c4
:queen
Run Code Online (Sandbox Code Playgroud)

在后一示例中,符号值是自描述的.

  • 这仍然无法解释为什么你不能只使用这些符号? (4认同)