明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
123
返回列表 发新帖
楼主: baitang36

[经验] function和quote的区别

  [复制链接]
 楼主| 发表于 2022-7-14 08:09:23 | 显示全部楼层
小菜123 发表于 2022-7-13 21:30
这么写,编译优化了吗?function定义的函数,似乎没法作为参数传递到其它函数中

list生成一个表,不会优化
发表于 2022-7-14 11:39:12 | 显示全部楼层
确实如楼主所说,《明经通道》翻译的autolisp函数对这个函数说明如下:
function

通知 Visual LISP 编译器将参数作为内置函数进行链接和优化

(function symbol | lambda-expr)
function 函数与 quote 函数相同,但它将通知 Visual LISP 编译器将参数视为内部函数或用 defun 定义的函数,对其进行链接和优化。

由 function 引用的经过编译的 lambda 表达式加载到 Visual LISP IDE 时,将包含调试信息。

参数

symbol

命名函数的符号。

lambda-expr

如下格式的表达式:

(LAMBDA arguments {S-expression}* )

返回值

表达式的求值结果。

示例

下列代码中,Visual LISP 编译器不能优化被引用的 lambda 表达式:

(mapcar
  '(lambda (x) (* x x))
       '(1 2 3))
向表达式中添加 function 函数后,编译器可对 lambda 表达式进行优化。例如:

(mapcar
   (function (lambda (x) (* x x)))
      '(1 2 3))
发表于 2022-7-14 11:51:00 | 显示全部楼层
本帖最后由 小菜123 于 2022-7-14 11:56 编辑

我上面那个语句,编译后看码似乎和楼主用function后是差不多的,肯定不是第一种结果
如果用list是不优化的,那么下面这个tt1命令怎么写才对呢?tt2是可以正常运行的

  1. (defun ttfunc (func / )
  2.    (eval func)
  3. )
  4. (defun c:tt1()
  5.   (ttfunc (function (lambda() (princ "\test"))))
  6. )

  7. (defun c:tt2()
  8.   (ttfunc (list (lambda() (princ "\test"))))
  9. )



您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-15 09:23 , Processed in 0.153142 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表