了解 gp:FindPointInList 函数
源代码中的函数标头解释了如何转换它所处理的信息。与前面的函数一样,此函数使用 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 下面是 的另一个示例,这次使用函数来测试列表中的值是否为 null(非 true)值: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 您可以在 .您也可以使用自己的函数。例如,假设您刚刚创建了一个非常强大的函数,名为: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 |
|Archiver|CAD开发者社区 ( 苏ICP备2022047690号-1 苏公网安备32011402011833)
GMT+8, 2024-12-15 11:43
Powered by Discuz! X3.4
Copyright © 2001-2021, Tencent Cloud.