在Common-LISP编程中使用两个字符串参数调用函数

时间:2016-10-07 03:09:31

标签: syntax common-lisp

我创建了一个获取两个字符串参数的函数。该函数只是添加每个字符串长度。下面是代码。

(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")的方式调用函数。

代码有什么问题?

picture showing error message

2 个答案:

答案 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))

也许有可能使阅读宏更聪明,但我不想深入研究这个,因为我不喜欢这个想法。遗憾。