CAD开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

AutoLISP 开发指南

了解 gp:FindPointInList 函数

2023-1-5 06:13| 发布者: admin| 查看: 517| 评论: 0|来自: AutoCAD

源代码中的函数标头解释了如何转换它所处理的信息。与前面的函数一样,此函数使用 LISP 的列表操作功能来执行工作。使用列表时,您经常会看到 mapcar 和 lambda 函数一起使用,因为它们在这里。起初,这些是奇怪且令人困惑的功能,其名称并未表明它们的作用。但是,一旦您学会了如何使用它们,您会发现它们是 AutoLISP 指令表中两个最强大的函数。以下是和的简要概述。gp:FindPointInListgp:FindMovedPointmapcarlambda

该函数将表达式应用于(映射)列表中的每个项目。例如,给定整数 1、2、3 和 4 的列表,可用于应用函数将 1 加到列表中的每个数字:mapcarmapcar1+

(mapcar '1+ '(1 2 3 4))
(2 3 4 5)

初始定义是将第一个参数中给出的函数映射到第二个参数(列表)中的连续项。操作的结果值是由应用于它的任何函数或表达式转换的列表。(实际上,可以做的不止于此,但现在这个定义就足够了。mapcarmapcarmapcar

在提供的示例中,列表中的每个值都传递给函数。本质上,执行以下操作,将结果值组合在一个列表中:'(1 2 3 4)1+mapcar

(1+ 1)  -> 2
(1+ 2)  -> 3
(1+ 3)  -> 4
(1+ 4)  -> 5

这是另一个例子,这次使用函数来测试列表中的值是否为空(不真)值:mapcarnull

(mapcar 'null (list 1 (= 3 "3") nil "Steve"))
(nil T T nil)

此代码中发生的情况基本上如下:

(null 1)    -> nil
(null (= 3 "3")   -> T
(null nil)   -> T
(null "Steve")   -> nil

您可以在 中使用许多现有的 AutoLISP 函数。您还可以使用自己的函数。例如,假设您刚刚创建了一个非常强大的函数,名为:mapcarequals2

(defun equals2(num)(= num 2))
EQUALS2
(mapcar 'equals2  '(1 2 3 4))
(nil T nil nil)

好吧,所以不是那么强大。但正是在这种情况下派上用场。您可以在不希望或不需要经历定义函数的开销的情况下使用。您有时会看到定义为匿名函数。例如,您可以编写一个表达式来执行相同的操作,而无需函数定义的开销,而不是定义调用的函数:equals2lambdalambdalambdaequals2lambda

(mapcar '(lambda (num) (= num 2)) '(1 2 3 4))
(nil T nil nil)

代码中发生的事情是这样的:

(= 1 2)	-> nil
(= 2 2)	-> T
(= 3 2)	-> nil
(= 4 2)	-> nil

有了这些知识,看看这个函数是否有意义。再次查看源代码中的注释。gp:FindPointInList


路过

雷人

握手

鲜花

鸡蛋

最新评论

QQ|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 )

GMT+8, 2024-5-19 14:59

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

返回顶部