我创建了一个获取两个字符串参数的函数。该函数只是添加每个字符串长度。下面是代码。
(defun add_twostring_length (mystr1 mystr2)
(+ (length mystr1) (length mystr2))
)
当我这样调用add_twostring_length
函数时,
(add_twostring_length“cpp”“lisp”)
输出正确。的 7
但是,当我以逗号的方式调用相同的函数时,
(add_twostring_length“cpp”,“lisp”)
我收到了错误消息。
错误:逗号不在反引号内。
[条件类型:READER-ERROR]
我想以(add_twostring_length "cpp", "lisp")
的方式调用函数。
代码有什么问题?
答案 0 :(得分:8)
你不妨问一下“为什么我不能在没有括号的情况下调用函数?”在lisp中,您将函数称为sexpr,其中包含汽车中的函数和cdr中的参数。没有涉及逗号 - 这是lisp的语法。
答案 1 :(得分:0)
你想要什么是可能的,但我强烈建议反对使用它:
(set-macro-character #\,
#'(lambda (stream char)
(read stream t nil t)))
上面的代码创建了所谓的“读取宏”。在读取时,常见的lisp将查找,
的所有出现并忽略它们。这使得调用函数成为可能:
(+ 1, 2, 3) ; => 6
然而,这会破坏模板中的转义:
`(1 2 ,(+ 3 4)) ; => (1 2 (+ 3 4))
也许有可能使阅读宏更聪明,但我不想深入研究这个,因为我不喜欢这个想法。遗憾。