Common lisp 如何删除反引号内字符串的quotationmarks

Common lisp 如何删除反引号内字符串的quotationmarks,common-lisp,Common Lisp,想象一下,我得到一个宏调用的函数,返回一个表达式,如 (do-something 'argument) 因此,函数必须看起来像 (defun form-expression (arg) `(do-something ',arg)) 但是当调用(表单表达式“foobar”)时,由于包装宏必须接收字符串作为参数,结果是: (do-something '"foobar") 如何“删除”给定字符串的引号?如果我理解正确,对于“foobar”的输入,您希望表单表达式的结果(dosomething

想象一下,我得到一个宏调用的函数,返回一个表达式,如

(do-something 'argument)
因此,函数必须看起来像

(defun form-expression (arg)
  `(do-something ',arg))
但是当调用
(表单表达式“foobar”)
时,由于包装宏必须接收字符串作为参数,结果是:

(do-something '"foobar")

如何“删除”给定字符串的引号?

如果我理解正确,对于“foobar”的输入,您希望
表单表达式的结果
(dosomething'foobar)

如果是这种情况,请使用函数。您需要传递
intern
ed字符串(如
(表单表达式(intern“foobar”))
),或者需要在函数中执行类型分派

(defun form-expression (arg)
   `(do-something ',(if (stringp arg) (intern arg) arg)))
事实上,因为您正在分派参数的类型,所以这是使用方法的最佳位置

(defmethod form-expression (arg) `(do-something ',arg))
(defmethod form-expression ((str string)) `(do-something ',(intern str)))

如果我理解正确,对于“foobar”的输入,您希望
表单表达式
的结果为
(dosomething'foobar)

如果是这种情况,请使用函数。您需要传递
intern
ed字符串(如
(表单表达式(intern“foobar”))
),或者需要在函数中执行类型分派

(defun form-expression (arg)
   `(do-something ',(if (stringp arg) (intern arg) arg)))
事实上,因为您正在分派参数的类型,所以这是使用方法的最佳位置

(defmethod form-expression (arg) `(do-something ',arg))
(defmethod form-expression ((str string)) `(do-something ',(intern str)))

你的问题是:如何去掉引号?

这个问题不是很有用

1:我们需要问,为什么会有“报价标记”

答:因为它是字符串的语法

这是一个字符串:
“佛”

2:我们需要问一下,没有“报价标记”我们有什么

答:符号

这是一个符号:

3:如果我们有一个字符串,如何创建或获取相应的符号

我们需要使用
INTERN
FIND-SYMBOL

> (intern "buddha")
|buddha|
4:为什么有竖条

默认情况下,所有符号在内部都是大写的(在早期,有很多计算机只有大写字符,而Lisp早在大洪水之前就被发现了)

因此,当符号具有非大写字符时,Common Lisp使用竖线转义符号

5:如何获取正常的内部大写符号

使用函数
STRING-UPCASE

> (intern (string-upcase "buddha"))
BUDDHA 

现在我们实习了一位大佛

你的问题是:我该如何去掉引号?

这个问题不是很有用

1:我们需要问,为什么会有“报价标记”

答:因为它是字符串的语法

这是一个字符串:
“佛”

2:我们需要问一下,没有“报价标记”我们有什么

答:符号

这是一个符号:

3:如果我们有一个字符串,如何创建或获取相应的符号

我们需要使用
INTERN
FIND-SYMBOL

> (intern "buddha")
|buddha|
4:为什么有竖条

默认情况下,所有符号在内部都是大写的(在早期,有很多计算机只有大写字符,而Lisp早在大洪水之前就被发现了)

因此,当符号具有非大写字符时,Common Lisp使用竖线转义符号

5:如何获取正常的内部大写符号

使用函数
STRING-UPCASE

> (intern (string-upcase "buddha"))
BUDDHA 
现在我们已经实习了一位大佛