• Visual LISP 第2章 数据类型、表达式和函数(5)函数


    1.定义AutoLISP函数

      (defun 函数名(变元……/局部变量……)表达式)

      (1)函数名与变量名的命名规则相同,不应与现有AutoLISP函数重名,否则,现有函数将被新定义的功能所取代。(2)变元即参数。即便没有变元也不能省略"()"。(3)局部变量。这里的局部变量是指局限于该函数内部所用的变量,只在该函数调用期间得到定义,调用结束,局部变量的值均为nil,同事释放所占存储空间。如不声明,它们则将成为全局变量。局部变量的声明不仅可以节省存储空间,还可以避免函数之间相互干扰。局部变量和变元之间用除号隔开。即使没有变元,也可以后局部变量说明,必须加除号。(4)表达式。用于描述该函数的运算。(5)返回值。最后一个表达式返回值即为该函数的返回值

      【例】定义一个已知圆柱体的半径和高,计算其体积的函数,源代码如下:

    1 ( defun volume(r h / v)
    2     ( setq v( * r r pi h))
    3 )

      该函数的函数名是volume,两个变元r(半径)和h(高度),有一个局部变量v,返回表达式( setq v( * r r pi h))的值。

    2.调用AutoLISP函数

      (函数名[变元]……)

      

    3.递归定义AutoLISP函数

      AutoLISP可以在一个函数内部定义另一个函数,也可以递归定义函数。

     【例】定义阶乘函数。

    4.调用AutoCAD命令

      AutoLISP用command函数调用AutoCAD命令,其格式为:(command "AutoCAD命令" "命令所需的数据"……)

      【例】绘制以(2,4)为圆心,5为半径的圆和(-2,-4)为圆心,5为半径的圆

     (command "circle" "2,4" "5")

    (command "circle" '(-2 -4) 5)

      【例】已知p1,p2,p3为不在同一条直线上的三个点,利用这三个点画圆

    1 (setq p1 '(100 100))
    2 (setq p2 '(-100 100))
    3 (setq p3 '(-100 -100))
    4 (command "circle" "3p" p1 p2 p3)

      【例】绘制p1(0,0)到p2(10,0)的一段直线

    (command "line" "0,0" "10,0" "")
    (command "line" '(0 0) '(10 0) "")
    (command "line" (list 0 0) (list 10 0) "")

      最后的双引号代表一个回车或空格。(书上第13页【例2-6】的最后一种画线方法实验失败,所以就不写了)。

    5.定义AutoCAD命令

      用defun函数定义AutoCAD命令,格式如下:

      (defun C:AutoCAD命令名 (/局部变量……) 表达式……)

      定义AutoCAD命令与定义函数基本相同,不同之处有两点:(1)命令名前加"C:"。(2)变元表内没有变元,但可以有局部变量说明。此外,还要注意所定义的AutoCAD命令不应与现有的AutoCAD命令重名。

  • 相关阅读:
    进度条功能
    网络编程
    并发编程
    UUID
    serverless 近期热度
    力扣 98. 验证二叉搜索树
    循环中多线程参数为空bug
    从头解决PKIX path building failed
    国内jenkins搭建不再龟速的方式
    CoachAI 2019年12月~2020年3月实习总结
  • 原文地址:https://www.cnblogs.com/xueniwawa/p/3966677.html
Copyright © 2020-2023  润新知