shaw53 发表于 2007-8-4 19:48:00

[求助]新手问题,谢谢![已解决]

本帖最后由 作者 于 2007-8-6 13:52:27 编辑 <br /><br /> <p>&nbsp;&nbsp;&nbsp; 这两天刚学 lisp,看到了 apply函数的说明。调用格式为:(apply 'function list) 其中list为参数表</p><p>&nbsp;官方给出的例子是 :(apply '+ '(1 2 3))&nbsp;&nbsp;&nbsp;&nbsp; ;返回值为6,类似的函数还有很多。</p><p>我不解的地方主要是这个&nbsp; '(1 2 3), 我想如果是(a b c)的话,那么这个表是非法的,因为a,b,c没有被赋值所以是没有意义的变量,因此这三者列在一起是不可构成一个正确的表的。但是,1,2,3是三个值,把三个值放在一起,也不是一个合法的表结构么。。。?不是说vlisp里面正是用这种结构来存储一个点的三坐标的么 ?</p><p>同样道理,我也不是很理解,为什么function函数前也要加上'呢 ?在quote函数说的说明里面我没有找到答案。。。</p><p>这个问题看了很久也没有理解,希望有朋友愿意帮我一下,谢谢!</p><p></p>

王咣生 发表于 2007-8-4 21:55:00

<p>apply不函数是将function应用于后面的表,它的处理相当于</p><p>(+ 1 2 3)</p><p>在+前面加'是禁止求值,如果不加的话(apply + '(1 2 3))</p><p>CAD会提示; error: bad function: #&lt;SUBR @0349f778 +&gt;</p><p>因为它执行了+的操作,但没找到操作数.</p>

shaw53 发表于 2007-8-5 16:25:00

<p>非常感谢!</p><p>这里我还有个问题,就是为什么这个参数表 (1 2 3)的前面也必须加一个'呢?</p><p>因为我认为(1 2 3)就是一个合法的表.</p><p>我比较笨~谢谢~~</p>

ZZXXQQ 发表于 2007-8-5 20:12:00

<p>不加'也可以,要写成(list 1 2 3)才行。因为在LISP中左括弧后第一个代号为函数名,而(1 2 3)中的数字1不是函数。</p>

shaw53 发表于 2007-8-6 13:51:00

<p>原来如此 !</p><p>这下明白了 ,谢谢!</p>
页: [1]
查看完整版本: [求助]新手问题,谢谢![已解决]