Sma*_*ajl 7 lisp functional-programming definition
LISP(或一般)中破坏性和非破坏性结构的正确定义是什么.我试图寻找实际意义但我只是发现了很多这些术语的用法而没有实际解释它们.
根据我的理解,破坏性函数意味着一个函数,它改变了构造(或变量)的含义 - 所以当我将一个列表作为参数传递给一个改变它的函数时,它被称为破坏性操作,因为它改变了初始列表并返回一个全新的列表.这是正确的还是有一些例外?
那么例如设置一个破坏性函数(因为它改变了x的值)?我想不是,但我不怎么样,我怎么能证明这一点.
(set 'x 1)
Run Code Online (Sandbox Code Playgroud)
对不起,可能是一个非常基本的问题....感谢您的回答!
我不会过多地解释"破坏性"这个词.
在列表处理中,破坏性操作是可能将一个或多个输入列表改变为可见副作用的操作.
现在,您可以扩展对数组,结构,CLOS对象等操作的含义.您还可以将变量赋值称为"破坏性"等等.
在Common Lisp中,讨论序列(一般是列表,字符串和向量)和多维数组的破坏性操作是有意义的.
Practical Common Lisp区分了两种破坏性操作:副作用操作和回收操作.
set是破坏性的和副作用:它总是修改它的第一个参数.请注意,它会更改符号的绑定,但不会更改当前绑定到该符号的内容.setf可以就地更改绑定或对象.
相比之下,nreverse是循环:它被允许修改它的参数列表,虽然不能保证它会,所以它应该像reverse(取回值)一样使用,除了输入参数可能被"销毁"而且不应该更长时间使用.[Scheme程序员可能称之为"线性更新"功能.]