为什么lisp中的mapcar使用名称而不是函数?

为什么lisp中的mapcar使用名称而不是函数?,lisp,common-lisp,lisp-2,Lisp,Common Lisp,Lisp 2,我正在阅读一本lisp书,我正在看mapcar,我的问题是为什么这是有效的: >地图车“+”12“3 4 但这不是: 地图车+'12'3 4 换句话说,是否有理由在lisp中决定mapcar的第一个参数不能是函数本身,而必须是它的名称?这有什么用?'+是一个函数。Common Lisp被称为“Lisp 2”,这意味着它有两个名称空间:在计算复合形式(如+a b)时,函数位置在函数名称空间中查找,而其他位置在值名称空间中查找。这意味着,例如,append list不会生成两个元素都是list函数的

我正在阅读一本lisp书,我正在看mapcar,我的问题是为什么这是有效的:

>地图车“+”12“3 4 但这不是:

地图车+'12'3 4 换句话说,是否有理由在lisp中决定mapcar的第一个参数不能是函数本身,而必须是它的名称?这有什么用?

'+是一个函数。Common Lisp被称为“Lisp 2”,这意味着它有两个名称空间:在计算复合形式(如+a b)时,函数位置在函数名称空间中查找,而其他位置在值名称空间中查找。这意味着,例如,append list不会生成两个元素都是list函数的列表:它生成两个元素都是list作为值绑定到的任何元素的列表

但有时需要在值位置获取名称的函数值:mapcar的第一个参数中有一个示例。为此,有一个特殊的操作符function:mapcar function+xy添加两个列表的元素。和quote一样,函数有一个read宏,即'

为了让这更有趣,mapcar实际上需要一个函数指示符,这样您就可以使用函数的nsme:mapcar'+XY将起作用,尽管它有点可怕。

'+是一个函数。Common Lisp被称为“Lisp 2”,这意味着它有两个名称空间:在计算复合形式(如+a b)时,函数位置在函数名称空间中查找,而其他位置在值名称空间中查找。这意味着,例如,append list不会生成两个元素都是list函数的列表:它生成两个元素都是list作为值绑定到的任何元素的列表

但有时需要在值位置获取名称的函数值:mapcar的第一个参数中有一个示例。为此,有一个特殊的操作符function:mapcar function+xy添加两个列表的元素。和quote一样,函数有一个read宏,即'

为了让这更有趣,mapcar实际上需要一个函数指示符,这样您就可以使用函数的nsme:mapcar'+xy将起作用,尽管这有点可怕

是否有理由在lisp中决定mapcar的第一个参数不能是函数本身,而必须是它的名称?这有什么作用

只是在CommonLisp中,identifier+有多种不同的用途。它是一个变量,一个函数,加上其他各种东西

写+表示变量。它由读取评估打印循环使用。+的值是计算的最后一个表单,++的值是++的上一个值,+++的值是++的上一个值

要告诉Common Lisp您想要使用标识符+的函数值,必须编写函数+或更短的“+”

因此

或更短

(mapcar #'+ '(1 2) '(3 4))
实际上意味着使用函数+和列表1 2和3 4调用mapcar

还有两种方法可以使用函数+

上面将让Lisp检索符号+的全局函数值

第四,我们还可以让函数对象成为源代码的一部分

是否有理由在lisp中决定mapcar的第一个参数不能是函数本身,而必须是它的名称?这有什么作用

只是在CommonLisp中,identifier+有多种不同的用途。它是一个变量,一个函数,加上其他各种东西

写+表示变量。它由读取评估打印循环使用。+的值是计算的最后一个表单,++的值是++的上一个值,+++的值是++的上一个值

要告诉Common Lisp您想要使用标识符+的函数值,必须编写函数+或更短的“+”

因此

或更短

(mapcar #'+ '(1 2) '(3 4))
实际上意味着使用函数+和列表1 2和3 4调用mapcar

还有两种方法可以使用函数+

上面将让Lisp检索符号+的全局函数值


第四,我们还可以将函数对象作为源代码的一部分。

谢谢。我不知道lisp强制执行严格的func[arg[arg..]]求值。谢谢。我不知道lisp强制执行严格的func[arg[arg..]]求值。谢谢你,我想,对于mapcar来说,我希望lisp知道第一个参数的类型,并自动在其相应的命名空间中查找该对象。您可能知道将此责任交给调用方的权衡吗?@plumSemPy:Lisp对函数调用的参数求值只有一条规则:参数的值是计算出来的。@plumSemPy。。。是一个函数,不是宏,也不是特殊的形式。谢谢你,我想,我会期待的
例如,对于mapcar,lisp需要知道第一个参数的类型,并自动在适当的名称空间中查找该对象。您可能知道将此责任交给调用方的权衡吗?@plumSemPy:Lisp对函数调用的参数求值只有一条规则:参数的值是计算出来的。@plumSemPy。。。是一个函数,不是宏,也不是特殊形式。
(mapcar '+ '(1 2) '(3 4))