Int 在公共Lisp中有没有办法将布尔值解析为整数?

Int 在公共Lisp中有没有办法将布尔值解析为整数?,int,boolean,lisp,common-lisp,Int,Boolean,Lisp,Common Lisp,我正在寻找一些内置函数或公共Lisp中的某个运算符,当输入为假布尔表达式时返回“0”,当输入为真时返回“1”。例如: (setq a 3) (setq b (+ (bool-to-int (< 0 a)) 2) (print "b should be 1 + 2 = 3") 有没有一种方法可以在不定义自定义函数的情况下使用Common Lisp实现这一点?您可以在需要将布尔表达式映射到[0,1]的任何位置编写if 1 0。没有任何内置表单可以完全按照您编写的方式进行操作。可能不是一个非常

我正在寻找一些内置函数或公共Lisp中的某个运算符,当输入为假布尔表达式时返回“0”,当输入为真时返回“1”。例如:

(setq a 3)
(setq b (+ (bool-to-int (< 0 a)) 2)
(print "b should be 1 + 2 = 3")

有没有一种方法可以在不定义自定义函数的情况下使用Common Lisp实现这一点?

您可以在需要将布尔表达式映射到[0,1]的任何位置编写if 1 0。没有任何内置表单可以完全按照您编写的方式进行操作。

可能不是一个非常优雅的解决方案,但您可以创建一个哈希表,例如

(setf *ht-bool-to-int* (make-hash-table))
(setf (gethash nil *ht-bool-to-int*) 0)
(setf (gethash t *ht-bool-to-int*) 1)
(defun bool-to-int (b)
     (gethash (not (not b)) *ht-bool-to-int*))
编辑:嵌套不适用于计算结果为true但不直接注册哈希表的随机表达式 然后,您可以实现自己的if版本,而无需使用内置的if,即

(defmacro my-if (condition then-clause else-clause)
  (let ((ev (gensym)))
     `(let ((,ev (vector (quote ,else-clause) (quote ,then-clause))))
          (eval (aref ,ev (bool-to-int ,condition))))))
深思熟虑:哈希表是使用if实现的吗