首页 理论教育循环处理函数-AutoCAD 2014中文版从入门到精通

循环处理函数-AutoCAD 2014中文版从入门到精通

【摘要】:AutoLISP提供了3个实现循环的函数,其中前面介绍了REPEAT和WHILE函数。foreach返回最后一次循环体中最后一个表达式的求值结果。foreach函数的语法框图如图14-9所示。<listen>)的各个元素提供给变元<function>进行求值,求值结果构成一个表后返回mapcar是一个处理表时最常用也是最有效的一个循环控制函数。<listen>)中的元素的数据类型应与函数<function>所要求的参数类型相匹配。若各个表的长度不等,则mapcar函数只循环其中的最小长度次数。图14-9 foreach函数的计算过程例如:

1.foreach函数。AutoLISP提供了3个实现循环的函数,其中前面介绍了REPEAT和WHILE函数。下面将介绍另外一个循环函数FOREACH,它主要适用于对表的每一个元素进行处理。其调用格式如下:

978-7-111-45924-8-Chapter14-129.jpg

foreach函数对一个表中所有成员代入表达式中进行求值。该函数中的表达式<expr>可以有多个,每个表达式一般以<name>为其参数。foreach函数循环将表<list>中每一个成员赋给符号原子<name>,再对循环体中的每一个表达式<expr>依次求值。foreach返回最后一次循环体中最后一个表达式的求值结果。

例如:

978-7-111-45924-8-Chapter14-130.jpg

在使用foreach函数时,第一个变量<name>(如上面例子中的n)一定是变量名,不能是常数或表达式。并且AutoLISP并不对它进行求值。而且,变量<name>是函数的内部变量,在foreach调用过程中,它依次赋以表元素,但在foreach函数执行完成之后,<name>仍保持原来的值。第二个自变量一定是表,如果为空表,则返回nil。

foreach函数的语法框图如图14-9所示。

2.mapcar函数。(www.chuimin.cn)

978-7-111-45924-8-Chapter14-131.jpg

将作为mapcar函数变元的一个或多个表(<list1>…<listen>)的各个元素提供给变元<function>(一个函数名)进行求值,求值结果构成一个表后返回mapcar是一个处理表时最常用也是最有效的一个循环控制函数。函数调用中的<function>是一个已知的函数名,它可以是AutoLISP的内建式函数,也可以是用户的自定义函数或者是lambda表达式(无名函数)。<list1>…<listen>必须是表。mapcar的功能是依次循环地把表<list1>…<listen>中的每个对应位置上的元素为函数<function>的参数,调用该函数进行求值,把每次循环求值的结果(function的返回值)按求值顺序构成一个表,作为mapcar函数的返回值。表<list1>…<listen>的数目必须和函数function所要求的参数数目相匹配,也就是若<function>要求一个参数,则有一个表;若要求两个参数,则有两个表等。mapcar函数和foreach函数一样,它不对参数表<list1>…<listen>中的元素求值。每个参数表(<list1>…<listen>)中的元素的数据类型应与函数<function>所要求的参数类型相匹配。表<list1>…<listen>的长度决定了函数<function>的调用次数,也决定了mapcar函数返回表的长度。若各个表的长度不等,则mapcar函数只循环其中的最小长度次数。若function不是一个变量,则必须在函数名前加一个单撇号来禁止求值,否则出错。

978-7-111-45924-8-Chapter14-132.jpg

图14-9 foreach函数的计算过程

例如:

978-7-111-45924-8-Chapter14-133.jpg