明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: aroom

隆重推出AutoLisp For Windows!

  [复制链接]
 楼主| 发表于 2008-6-15 14:18 | 显示全部楼层
算子的函数

算子函数可分为内建函数和用户定义函数:由内核实现的函数或通过导入动态链接库创建的函数为内建函数,对它求值返回函数名称和内存所在的地址(显示为十六进制数值);用户定义函数是将一个算式赋值给函数名称符号,对它求值返回一个特殊的列表,该列表可以象对待其他的列表一样操作(car cdr length ...)。

定义函数 defun

(defun fun (x) (+ x 1)) ;=> (算式 (x) (+ x 1)) 

;定义一个名称为fun的函数, 有一个形式参数x,函数体里一条语句(+ x 1) 将自变量x加1返回。
定义函数也可以使用赋值语句:

(setq fun (算式 (x) (+ x 1)) ;=> (算式 (x) (+ x 1)) 
 
(car fun)  ;=> (x)

(cdr fun)  ;=> ((+ x 1))

(length fun)  ;=> 2

 楼主| 发表于 2008-6-15 20:52 | 显示全部楼层
递归函数的使用
  1. (定义函数 阶乘(未知数) ;定义一个函数,函数的名称为"阶乘"
  2.    (条件
  3. &#160;&#160;&#160;&#160;&#160; ((<= 未知数 1) 1) ;(递归出口) 当x = (...-1 , 0 ,1)时,不再循环
  4. &#160;&#160;&#160;&#160;&#160; (真 (* 未知数 (阶乘 (- 未知数 1)))) ;其他情况时x = (2 , 3...) , 改变参数x=x-1,调用自身
  5. &#160;&#160; )
  6. )
  7. (阶乘 5)&#160; ;调用名称为"阶乘"的函数,将5代入参数x
  8. (定义函数 累加(x) ;定义一个函数,函数的名称为"累加"
  9. &#160;&#160; (条件
  10. &#160;&#160;&#160;&#160;&#160; ((= x 1) 1)
  11. &#160;&#160;&#160;&#160;&#160; (真 (+ x (累加 (- x 1))))
  12. &#160;&#160; )
  13. )
复制代码
等同于累加的非递归函数
  1. (定义函数 累加(x)
  2. &#160;&#160; (应用 + (数列 1 x))) ;将"+"符号指向的函数作用于
  3. (累加 100) ;调用名称为"累加"的函数,将100代入参数x
复制代码
发表于 2008-6-16 16:45 | 显示全部楼层
一大堆自定义而又没有任何解释的函数,让大家猜谜啊?
发表于 2008-6-17 19:34 | 显示全部楼层
aroom发表于2008-6-15 20:52:00递归函数的使用(定义函数 阶乘(未知数) ;定义一个函数,函数的名称为\"阶乘\"   (条件      ((<= 未知数 1) 1) ;(递归出口) 当x = (...-1 , 0 ,1)时,不再

   全中文的程序还真是看不太习惯,呵呵

 楼主| 发表于 2008-6-17 21:00 | 显示全部楼层
是啊! 久别的中文代码, 需要我们来传承 科技时代再显汉语魅力 抛砖引玉 不当处还请各位斧正


<中英文函数对照表>
 
按关键字-设置                 assoc-set
按序号-设置                   nth-set
按指向-设置                   ref-set
绑定                          bind
保存                          save
遍历                          dotree
并集                          intersect
捕获                          catch
参数表                        args
查找                          find
查找全部                      find-all
差集                          difference
拆分                          slice
拆散                          explode
常量                          constant
常量?                         protected?
长度                          length
成员                          member
乘                            mul
程序路径                      appPath
程序名称                      appFilename
出错事件                      error-event
出错文字                      error-text
出错序号                      error-number
除                            div
除非                          unless
创建目录                      make-dir
次方                          pow
存在                          exists
存资源                        put-url
错误函数                      error-event
打包                          pack
打开                          open
大写                          upper-case
弹出                          pop
弹出-按关键字                 pop-assoc
当                            when
当前行                        current-line
导入                          import
导入库                        importDLL
导入库-全部                   importDLL-ALL
等比数列                      series
底值                          floor
地址                          address
第                            nth
调试                          debug
迭代参数                      doargs
迭代列表                      dolist
迭代字串                      dostring
顶值                          ceil
定义函数                      defun
定义函数宏                    defun-macro
定义新建                      def-new
读                            read
读入缓冲区                    read-buffer
读入键值                      read-key
读入文件                      read-file
读入一行                      read-line
读入字节                      read-char
对数                          log
翻转                          reverse
反对数                        log
反余弦                        acos
反正切                        atan
反正弦                        asin
非                            not
分支                          case
符号?                         symbol?
符号表                        symbols
符号名字                      name
复制内存                      cpymen
复制文件                      copy-file
改变当前目录                  change-dir
格式                          format
跟踪                          trace
公约数                        gcd
共享                          share
挂起                          sleep
关闭                          close
关联                          assoc
管道                          pipe
过滤                          filter
合并                          append
合并文件                      append-file
合法符号?                     legal?
宏?                           macro?
环境变量列表                  env
还原                          source
换行输出                      println
回调                          callback
回调结束                      callback-end
或                            or
集                            list
集合                          list
计时                          time
计时器                        timer
计数                          count
加                            add
加密                          encrypt
加入                          cons
假?                           nil?
假如                          if
简式                          curry
减                            sub
交换                          swap
交集                          unique
截尾                          chop
结构                          Cstruct
结构大小                      sizeof
结构定义                      Cstruct-def
结构新建                      Cstruct-new
结尾以                        ends-with
解包                          unpack
解析                          parse
今天耗时                      time-of-day
进程                          process
矩阵乘                        multiply
矩阵求逆                      invert
矩阵运算                      mat
矩阵转置                      transpose
句组                          progn
绝对值                        abs
开方                          sqrt
开头以                        starts-with
空                            nil
空?                           nil?
空值?                         empty?
快速傅立叶变换                fft
快速傅立叶反变换              ifft
扩充                          expand            
扩让                          letex
连接                          join
列                            list                        
列表?                         list?
零?                           zero?
模块                          context
模块?                         context?
末尾                          last
目录?                         directory?
目录列表                      directory
内部盈利率                    irr
内建函数?                     primitive?
排序                          sort
判别全部                      for-all
抛出                          throw
抛出错误                      throw-error
匹配                          match
嵌让                          letn
清除                          clean
求                            eval
求值                          eval
取长整数                      get-long
取实数                        get-float
取整数                        get-int
取资源                        get-url
取字符                        get-char
取字符串                      get-string
全域                          global
全域?                         global?
缺省函数                      default
让                            let
日期                          date
日期值                        date-value
如果                          if
若                            if
删除符号                      delete
删除目录                      remove-dir
删除文件                      delete-file
删除资源                      delete-url
设                            setq
设备                          device
设置                          set
设置-按关键字                 set-assoc
设置-按序号                   set-nth
设置-按指向                   set-ref
设置-区域                     set-local
设置全部-按指向               set-ref-all
剩余                          cdr 
实数                          float
实数?                         float?
始值?                         null?
首个                          car 
输出                          print
数列                          sequence
数值?                         number?
数组                          array
数组?                         array?
数组转列表                    array-list
四舍五入                      round
搜索                          search
算式?                         lambda?
随机求值                      amb
随机实数                      random
随机整数                      rand
随机种子                      seed
随机组合                      randomize
提交资源                      post-url
替换                          replace
替换-按关键字                 replace-assoc
条件                          cond
同步                          semaphore
统一                          unify
退出                          exit
文件?                         file?
文件定位                      seek
文件信息                      file-info
系统错误                      sys-error
系统命令                      shell
系统信息                      sys-info
现在时间                      now
销毁                          destroy
小写                          lower-case
写出缓冲区                    write-buffer
写出文件                      write-file
写出一行                      write-line
写出字节                      write-char
新建                          new
修剪                          trim
序号                          index
旋转                          rotate
选择                          select
循环步长                      for
循环次数                      dotimes
循环计数                      repeat
循环条件                      while
循环元素                      foreach
循环直到                      until
寻值                          lookup
压入                          push
引用                          quote
引用?                         quote?
应用                          apply
映射                          mapcar
余数                          mod
余弦                          cos
与                            and
原子?                         atom?
展平                          flat
真                            true
真?                           true?
整数                          integer
整数?                         integer?
正负值                        sgn
正切                          tan
正态函数                      normal
正弦                          sin
正则表达式                    regex
支付款额                      pmt
执行                          startapp
执行-循环条件                 do-while
执行-循环直到                 do-until
指向                          ref
指向-全部                     ref-all
重复                          dup
重命名文件                    rename-file
重置                          reset
周期值                        nper
转储                          dump
转为符号                      sym
装载                          load
自减                          dec
自增                          inc
字符                          char
字符串                        string
字符串?                       string?
字符串求值                    eval-string
最大值                        max
最小值                        min

 楼主| 发表于 2008-6-17 21:45 | 显示全部楼层
;;;---------------------
;;;|&#160;&#160; Win32编程点滴&#160;&#160; |
;;;---------------------
  1. ;;;--------------------------------------------------------------------------------
  2. ;;; 如何隐藏/显示任务栏?
  3. (setq trayclsname "Shell_TrayWnd") ; 任务栏的类名
  4. (if (/= 0 (setq hwnd (FindWindow trayclsname 0))) ; 先获得句柄,之后隐藏.
  5. &#160;&#160;&#160; (ShowWindow hwnd 0)) ;隐藏任务栏
  6. &#160;&#160;&#160; ;(ShowWindow hwnd 1)&#160; ; 显示任务栏
  7. ;;;--------------------------------------------------------------------------------
  8. ;;; 如何禁止/允许/显示/隐藏开始按钮?
  9. (setq buffer (dup "\000" 127)
  10. &#160;&#160;&#160;&#160;&#160; tray&#160; "Shell_TrayWnd"
  11. &#160;&#160;&#160;&#160;&#160; bar "BUTTON")
  12. (setq htraywnd (FindWindow tray 0)) ; 获得状态栏句柄
  13. (setq child (GetWindow htraywnd GW_CHILD)) ; 获得状态栏的子窗口(如果有的话)
  14. (if (/= child 0)
  15. &#160;&#160;&#160; &#160;(progn
  16. &#160;&#160;&#160;&#160;&#160;&#160; (setq slen (GetClassName child buffer (length buffer))) ;获得子窗口类名
  17. &#160;&#160;&#160;&#160;&#160;&#160; (if (and (> slen 0)
  18. &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160;&#160;&#160;&#160; (= (strcase (slice 0 (1- slen) buffer)) bar))
  19. &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160; (progn
  20. &#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; (ShowWindow child SW_HIDE) ; 隐藏开始按钮
  21. &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; ; (ShowWindow child SW_SHOW) ; 显示开始按钮
  22. &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; ; (EnableWindow child 0) ; 禁止开始按钮
  23. &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; ; (EnableWindow child 1) ; 允许开始按钮
  24. &#160;&#160;&#160; &#160;&#160;&#160; &#160;&#160;&#160; &#160; )
  25. &#160;&#160;&#160; &#160;&#160;&#160; &#160; )
  26. &#160;&#160;&#160; &#160;)
  27. )
  28. ;;;--------------------------------------------------------------------------------
  29. ;;; 如何创建一个真正的"总在最上面"窗口?
  30. (SetWindowPos hwin HWND_TOPMOST 0 0 0 0 (| SWP_NOACTIVATE SWP_NOMOVE SWP_NOSIZE))
  31. ;;;--------------------------------------------------------------------------------
  32. ;;; 如何创建热键?比如CTRL + ALT + A
  33. (cond
  34. &#160;&#160; ((= message WM_CREATE)
  35. &#160;&#160;&#160; (RegisterHotKey hwnd 0x65 (| MOD_CONTROL MOD_ALT) 0x41)) ; CTRL + ALT + A (041h is 65 - 065h is 101)
  36. &#160;&#160; ((= message WM_HOTKEY)
  37. &#160;&#160;&#160; (MessageBox hwin "You press HotKey CTRL + ALT + A !" "Hotkey Example" (| MB_OK MB_ICONINFORMATION)))
  38. &#160;&#160; ((= message WM_DESTROY)
  39. &#160;&#160;&#160; (UnregisterHotKey hwin 0x65)
  40. &#160;&#160;&#160; (PostQuitMessage 0))
  41. )
  42. ;;;--------------------------------------------------------------------------------
  43. ;;; 如何获得Windows目录和系统目录
  44. (setq buffer (dup "\000" 128))
  45. (GetWindowsDirectory buffer (length buffer)) ; 置Windows目录于缓冲区中
  46. ;(GetSystemDirectory buffer (length buffer)) ; 置系统目录于缓冲区中
  47. (setq path (trim buffer))
  48. ;;;--------------------------------------------------------------------------------
  49. ;;; 如何从我的程序打开开始菜单?
  50. (SendMessage hwnd WM_SYSCOMMAND SC_TASKLIST 0)
  51. ;;;--------------------------------------------------------------------------------
  52. ;;; 如何关闭正被激活的程序 ?
  53. (SendMessage (GetForegroundWindow) WM_CLOSE 0)
  54. ;;;--------------------------------------------------------------------------------
  55. ;;; 如何去掉窗口标题 ?
  56. (setq win_style (GetWindowLong hwnd GWL_STYLE)) ; 获得当前窗口类
  57. (SetWindowLong hwnd GWL_STYLE (^ win_style WS_CAPTION)); 去掉WS_CAPTION, 设置窗口类
  58.  
  59. ;;;--------------------------------------------------------------------------------
  60. ;;; 如何知道窗口是否在任务栏中(或可见)?
  61. (if (/= 0 (IsWindowVisible hwin))
  62. &#160;&#160;&#160; (println "窗口可见")
  63. &#160;&#160;&#160; &#160;(println "窗口不可见"))
  64. ;;;--------------------------------------------------------------------------------
  65. ;;; 如何隐藏一个窗口?
  66. (setq hwnd (FindWindow "mIRC32" 0)) ; 寻找mIRC32
  67. (if (/= 0 hwnd)
  68. &#160;&#160;&#160; (ShowWindow hwnd 1) ; 显示窗口
  69. &#160;&#160;&#160; ;(ShowWindow hwnd 0) ; 隐藏窗口
  70. &#160;&#160;&#160; (print "mIRC32未运行..."))
  71. ;;;--------------------------------------------------------------------------------
  72. ;;; 如何将窗口置于前台?
  73. (SetForegroundWindow hwnd)
  74. ;;;--------------------------------------------------------------------------------
  75. ;;; 如何屏蔽CTRL+ALT+DEL,ALT+TAB+CTRL+ESC这些键?
  76. (SystemParametersInfo SPI_SCREENSAVERRUNNING 1 0 0)
  77. ; Windows98 only 1 关闭 0 允许
  78. ;;;--------------------------------------------------------------------------------
  79. ;;; 如何使用默认的浏览器或邮件程序?
  80. (setq webpage "http://www.google.com"
  81. &#160;&#160;&#160;&#160;&#160; mail&#160; "someone@mailhost.com"
  82. &#160;&#160;&#160;&#160;&#160; operation "open")
  83. (ShellExecute hwin operation webpage 0 0 SW_SHOWNORMAL)
  84. (ShellExecute hwin operation mail 0 0 SW_SHOWNORMAL)
  85. ;;;--------------------------------------------------------------------------------
  86. ;;; 如何用Win32 API显示网络连接对话框?
  87. (importDLL-ALL "mpr.dll")
  88. (WNetConnectionDialog hwnd RESOURCETYPE_DISK)
  89. ;;;--------------------------------------------------------------------------------
发表于 2008-6-17 22:02 | 显示全部楼层
楼主,你这个代码除了用LSP表来表达程序外,其它与VB有什么区别?
发表于 2008-6-17 23:11 | 显示全部楼层
牛人,永远关注中
 楼主| 发表于 2008-6-18 11:10 | 显示全部楼层
重载函数

一个函数根据参数的数据类型不同,进行相应的操作处理。也是一种对相似功能函数的整合方法,如字符串和列表的许多功能相似,获取长度,取首个元素,末尾元素,合并...

在Autolisp中需要不同的函数来对应不同的数据类型: strcat与append , strlen与length, substr与car

算子函数对大部分的字符串处理和列表处理进行了整合:

(+ 1 2 3 4)                =>   10
(+ '(1 2) '(a b))          =>  (1 2 a b)
(+ "ab" " append " "CD")   =>   "ab append CD"

(length '(1 2 a b))        =>   4
(length "suanz")           =>   5

(car '(1 2 a b))           =>   1
(car "suanz")              =>   "s"

(cdr '(1 2 a b))           =>   (2 a b)
(cdr "suanz")              =>   "uanz"

(last '(1 2 a b))           =>   b
(last "suanz")              =>   "z"

......
 楼主| 发表于 2008-6-21 00:07 | 显示全部楼层
<br/>算子语言函数说明<br/><br/>&#160;&#160;&#160; 本节对算子语言中的函数逐个地进行详细说明,并给出示例语句来加深理解. 函数说明分为: 函数名称、功能、语法、使用方法、示例及语句注释. 由于算子语言中的大部分函数具有多态的特性, 可以代入多个可选参数, 还可根据操作目标来选用不同数据类型的参数, 所以一个函数会出现多条不同的使用语法. <br/>&#160;&#160;&#160; 为帮助使用者从参数的字面读懂函数所带参数的数据类型, 文档中对函数的参数做了统一的命名规定. 规定说明如下:<br/><br/>[ xxx ]&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 一对[ ]中的 xxx 为可选参数, 调用函数时, 根据函数的使用效果来决定是否使用或省略.<br/>[ xxx-2 ... ]&#160;&#160;&#160; 指多个可选参数, 数目个数不限.<br/>&#160;<br/>bool-&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 布尔型, 空或真, nil或true<br/>num-&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 数值类型, 可以是整数, 也可以是实数<br/>int-&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 整数类型<br/>float-&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 实数类型<br/>str-&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 字符串类型<br/>lst-&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 列表类型<br/>sym-&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 符号类型<br/>exp-&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 表达式类型, 为任意值的数据或一个函数调用<br/><br/>idx&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 序号<br/>key&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 一对关联数据的键字<br/>rad&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 弧度值<br/>pid&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 子进程标识<br/><br/>function&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 函数<br/>param&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 参数<br/>default&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 缺省值<br/>local&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 局部<br/>var&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 变量<br/>body&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 函数体中的语句<br/>condition&#160;&#160;&#160;&#160;&#160;&#160;&#160; 条件<br/>file&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 文件<br/>path&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 路径<br/>buffer&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 缓冲区, 变量指向一个内存块, 显示为字符串<br/>size&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 字节长度<br/>address&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 内存地址<br/>from-address&#160;&#160;&#160;&#160; 源内存地址<br/>to-address&#160;&#160;&#160;&#160;&#160;&#160; 目的内存地址<br/><br/>示例说明:<br/><br/>(+ 1 1)&#160;&#160;&#160;&#160; =&gt;&#160;&#160; 2<br/><br/>=&gt; 的左侧部分为输入内容, 可以粘贴到算子IDE中的文档窗口. 右侧为求值后的结果. (按F6键, 调试窗口看到的输出内容)<br/><br/>&lt;未完待续&gt;<br/>
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-2 17:44 , Processed in 1.702804 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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