明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: aroom

隆重推出AutoLisp For Windows!

  [复制链接]
 楼主| 发表于 2008-6-12 10:56 | 显示全部楼层

;;;你可以用window函数

(window)

;;;(dialog)

 楼主| 发表于 2008-6-12 11:14 | 显示全部楼层

在井里往外看,只能看到洞口大小的外面世界,走出井外,世界变得广阔而精彩。

大家对ACDB数据库的连接和AutoCAD Command的调用,非常关切。心情可以理解,这里先给出答案,能运行,运行得很好,算子已经打通了VBA和Visual lisp的通讯屏障,我会在末尾的篇章加以介绍。

我们要学习的不只是AutoCAD数据库函数,还有windows API函数,OpenGL库函数,ODBC数据库函数,socket网络套节字函数...

在操作系统的层面学语言,才能知其然,也知其所以然。

 楼主| 发表于 2008-6-12 11:45 | 显示全部楼层

关于算子编程的答疑解惑

“加吧”菜单栏是即时消息通讯工具,登陆注册一个账号

选择suanz@conference.jabber.org 参与讨论 

发表于 2008-6-12 12:21 | 显示全部楼层
感觉离真正的语言还差很远
 楼主| 发表于 2008-6-12 12:35 | 显示全部楼层

算子函数


<类型判别>

    atom?        判别一个表达式的值是否为原子
    array?       判别一个表达式的值是否为数组
    context?     判别一个表达式的值是否为模块
    directory?   判别一个表达式的值是否为磁盘中的目录
    empty?       判别一个表达式的值是否为空列表或空字符串
    file?        判别一个表达式的值是否为磁盘中已存在的文件
    float?       判别一个表达式的值是否为实数
    global?      判别一个符号是否为全体模块共享
    integer?     判别一个表达式的值是否为整数
    lambda?      判别一个表达式是否为算式表达式
    legal?       判别一个字符串是否包含合法符号
    list?        判别一个表达式的值是否为列表
    macro?       判别一个表达式是否为算式宏表达式
    NaN?         判别一个实数是否为有效值
    nil?         判别一个表达式的值是否为空(nil)
    null?        判别一个表达式的值是否为空(nil)或空字符串("") 或空列表'() 或 0
    number?      判别一个表达式的值是否为实数或整数
    protected?   判别一个符号是否为不能改写的常量
    primitive?   判别一个表达式的值是否为内建函数
    quote?       判别一个表达式的值是否为引用
    string?      判别一个表达式的值是否为字符串
    symbol?      判别一个表达式的值是否为符号
    true?        判别一个表达式的值是否为非 nil
    zero?        判别一个表达式的值是否为 0 或 0.0             
    listp        判别一个表达式的值是否为列表
    null         判别一个表达式的值是否为空(nil)
    numberp      判别一个表达式的值是否为实数或整数
    zerop        判别一个表达式的值是否为 0 或 0.0
    type         返回指定符号的数据类型

<数据转换>

    int          将字符串或浮点数转换为一个整数
    flt          将数值转换为表示浮点数的32位值
    float        将字符串或整数转换为一个浮点数
    string       转换任意类型的数据为字符串
    sym          将字符串转换为符号
    name         返回符号或模块的名字
    fix          将浮点数转换为一个整数
    atoi         将字符串转换为一个整数
    atof         将字符串转换为一个浮点数
    itoa         将整数转换为一个浮点数
    rtos         将浮点数转换为一个字符串
    ascii        将字符转换为ASCII码
    chr          将ASCII码转换为字符
    char         将字符转换为ASCII码,或将ASCII码转换为字符
    UINT         返回无符号的32位整数
    MAKELONG     将两个16位整数移位后相加,返回32位整数
    LOWORD       返回32位整数的低16位整数值
    HIWORD       返回32位整数的高16位整数值

<算术运算>

    +, -, *, /, %  算术运算,若第一个参数为实数类型则进行浮点运算,否则进行整数运算
    + (加)         返回所有数的和
    - (减)         将第一个数减去其他数的和并返回差值
    * (乘)         返回所有数的乘积
    / (除)         将第一个数除以其他数的乘积并返回商,(整数运算时返回商的整数部分,小数部分被忽略)   
    1+ (增1)       返回参数加1的值,等同于AutoLisp语言的1+
    1- (减1)       返回参数减1的值,等同于AutoLisp语言的1-
    ++ (自增)      将参数加1后的值存入参数(参数发生改变),等同于C语言的++
    -- (自减)      将参数减1后的值存入参数(参数发生改变),等同于C语言的--


<关系运算>

    关系运算可以用于对任意一种数据类型进行比较
    = (等于)          比较参数是否相等
    == (等于)         比较参数是否相等
    /= (不等于)       比较参数是否值不相等
    != (不等于)       比较参数是否值不相等
    < (小于)          如果每个参数值都小于它右边的参数则返回真,否则返回空
    <= (小于或等于)   如果每个参数值都小于或等于它右边的参数则返回真,否则返回空
    > (大于)          如果每个参数值都大于它右边的参数则返回真,否则返回空
    >= (大于或等于)   如果每个参数值都大于或等于它右边的参数则返回真,否则返回空


<按位运算>
  
    &             按位与
    |             按位或
    ^             按位异或
    ~             按位非,返回参数的按位非(即 1 的补码)
    <<            按位位左移
    >>            按位位右移


<逻辑运算>
    &&, ||, !     逻辑与,或,非. 等同于C语言的 && || !
    and           逻辑与. 等同于C语言的 &&
    or            逻辑或. 等同于C语言的 ||
    not           逻辑非. 等同于C语言的 !


<赋值>

    set           将一个或多个单引号中的符号名的值设置成一个表达式的值
    setq          将一个或多个符号(不带单引号)设置为相应表达式的值
    set-assoc     替换列表中的关联项
    set-nth       改变列表或字符串中指定序号的元素或字符
    set-ref       在嵌套的列表中查找一个元素并替换为一个新值
    set-ref-all   在嵌套的列表中查找所有元素并替换为新值
    assoc-set    替换列表中的关联项
    nth-set    改变列表或字符串中指定序号的元素或字符
    ref-set    在嵌套的列表中查找一个元素并替换为一个新值
    constant      定义一个常量符号
    let           声明局部变量并对其进行赋值
    letex         将局部变量扩展到一个表达式中, 然后进行求值
    letn          增量初始化局部变量, 就象嵌套的let
    local         声明局部变量
    global-setq   在全局作用域里设置一个或多个符号(不带单引号)为相应表达式的值


  
  

<函数定义>

    defun         定义一个新函数或lambda算式表达式
    defun-macro   定义一个宏或算式宏表达式
    lambda        定义一个无名的函数或lambda算式表达式
    global-defun  在全局作用域里定义一个新函数或lambda算式表达式
    global-defun-macro  在全局作用域里定义一个宏或算式宏表达式

<流程控制>

    if            根据对条件的判断结果,对两个表达式求值
    progn         将多个表达式组合为一块依次求值. 等同于C语言的 { }
    unless        按条件对表达式进行求值, 等同于if (not...) then ... else...  
    case          依据控制变量的值做求值语句分支. 等同于C语言的switch
    cond          多条件、多处理结果函数
    while         对测试表达式进行求值,如果它不是空(nil),则执行循环体中的表达式,重复这个过程,直到测试表达式的求值结果为空(nil)
    foreach       将表中的所有成员以指定变量的身份带入表达式求值
    repeat        对循环体中的每一个表达式进行指定次数的求值计算,并返回最后一个表达式的值
    for           在一个指定的范围中依次求值
    for-all       根据判别条件对表中的所有元素进行检查
    doargs        迭代函数中的所有参数
    dolist        根据判别条件对表中的所有元素进行检查
    dostring      对字符串中的每个字符进行求值
    dotimes       在一个指定的范围中依次求值
    dotree        迭代模块中的所有符号
    do-until      重复求值直到表达式满足条件
    do-while      重复求值但条件为真时  
    until         重复循环对表达式进行求值直到条件满足为止
    when          按条件对表达式中的语句块进行求值
   

<列表操作>  
   
    car         返回列表或字符串中的第一个元素
    cadr        返回列表或字符串中的第二个元素
    caddr       返回列表或字符串中的第三个元素
    cdr         返回列表或字符串中除第一个元素后的其余元素
    last        返回列表或字符串的最后一个元素
    cons        将一个元素加到列表的前面, 产生一个新表
    list        将任意数目的表达式组合成一个表   
    append      合并列表,数组或字符串为新的列表, 数组或字符串   
    length      计算列表中的元素数目或字符串的字符个数
    apply       将用户定义的函数或内建函数作用于参数列表
    mapcar      将函数映射到列表中的所有元素中,返回收集的求值结果列表
    args        获取宏表达式中的所有参数或函数中的剩余参数组成的列表
    assoc       查找列表中的关键字关联表项
    assoc-set   替换列表中的关联表项    
    catch       对表达式进行求值, 捕获出现的错误
    chop        截除列表中的最后一个元素
    clean       从列表中清除一个或多个元素
    count       计算列表中的每个元素在另外一个列表中的出现次数
    curry       算式的简化形式,将函数 f(x, y) 转换为函数 fx(y)
    def-new     复制符号到一个不同的模块中
    dup         按指定的次数复制,从而创建一个列表或字符串   
    eval        对一个表达式进行求值
    exists      在列表中检查给定的条件
    expand      在嵌套的列表中替换符号
    filter      过滤一个列表
    find        在列表或字符串中查找一个元素
    flat        将嵌套的列表展平为简单的列表
    index       从列表中过滤元素并返回它们的序号
    unify       合并两个列表
    difference  返回两个列表的差集   
    intersect   返回两个列表的交集
    lookup      在关联列表中查询成员   
    match       在列表或字符串中匹配给定的样式
    member      在列表或字符串中查找成员   
    nth         返回列表或字符串中的指定序号元素
    nth-set     更改列表或字符串中的指定序号元素
    set-nth     改变列表或字符串中指定序号的元素或字符
    pop         返回列表中的一个元素或返回字符串中的一个字符,并将其从源中删除
    push        在列表或字符串中插入一个新元素
    quote       引用一个表达式
    ref         返回嵌套列表中元素的位置
    ref-all     返回嵌套列表中所有元素的位置序号组成的向量列表
    ref-set     在嵌套列表中查找元素并替换为新值
    replace     替换列表或字符串的元素
    reverse     反转列表或字符串的元素
    rotate      旋转列表或字符串中的元素
    select      从列表或字符串中选择元素
    silent      将多个表达式组合为一块依次求值, 隐藏控制台输出结果
    slice       拆分列表或字符串, 抽取其中的一部分为新列表或字符串
    sort        对列表按要求进行排序
    starts-with 检查列表或字符串的开头,是否和给定的样式匹配
    ends-with   检查列表或字符串的结尾,是否和给定的样式匹配
    swap        交换列表或字符串中的两个元素或字符  
    unique      返回没有重复元素的列表
    subst       替换列表或字符串的元素


<字符串操作>

    car         取得列表中的第一个元素或字符串中的第一个字符
    cdr         返回列表中排除第一个元素后的列表或字符串中的排除第一个字符后的字符串
    last        返回列表或字符串的最后一个元素
    append      合并列表,数组或字符串为新的列表, 数组或字符串
    join        连接多个列表或字符串
    length      计算列表中的元素数目或字符串的字符个数
    ascii       将字符转换为ASCII码
    chr         将ASCII码转换为字符
    char        将字符转换为ASCII码,或将ASCII码转换为字符
    chop        截除字符串的最后一个字符
    dup         按指定的次数复制,从而创建一个列表或字符串
    encrypt     按密码加密字符串或解密已加密的字符串
    eval-string 解析字符串为表达式并对其进行求值
    explode     将字符串拆散为由字符组成的列表
    find        在列表或字符串中查找一个元素
    find-all    在字符串中查找匹配样式的所有字符, 组合为一个新列表
    format      格式化数值或字符串, 等同于C语言的printf
    printf      格式化数值或字符串, 等同于C语言的printf    
    address     取得一个数值或字符串的内存地址   
    get-char    从指定的内存地址中获取一个字符
    get-float   从指定的内存地址中获取一个双精度浮点数
    get-int     从指定的内存地址中获取一个整数
    get-long    从指定的内存地址中获取一个64位的长整数
    get-string  从指定的内存地址中获取一个字符串   
    int         将字符串或浮点数转换为一个整数
    float       将字符串或整数转换为一个浮点数  
    member      在列表或字符串中查找成员
    name        返回符号或模块的名字  
    nth         返回列表或字符串中的指定序号元素
    nth-set     更改列表或字符串中的指定序号元素
    set-nth     改变列表或字符串中指定序号的元素或字符
    parse       按标记分断字符串, 并将它们组成列表
    push        在列表或字符串中插入一个新元素
    pop         返回列表中的一个元素或返回字符串中的一个字符,并将其从源中删除   
    regex       在字符串中执行Perl兼容的正则表达式搜索
    replace     替换列表或字符串的元素
    reverse     反转列表或字符串的元素
    rotate      旋转列表或字符串中的元素
    select      从列表或字符串中选择元素   
    slice       拆分列表或字符串, 抽取其中的一部分为新列表或字符串
    source      返回绑定到符号的字符串
    starts-with 检查列表或字符串的开头,是否和给定的样式匹配
    ends-with   检查列表或字符串的结尾,是否和给定的样式匹配
    string      转换任意类型的数据为字符串
    sym         将字符串转换为符号   
    trim        修剪字符串的前导字符和尾随字符
    unicode     转换ASCII或UTF-8为UCS-4 Unicode
    pack        将数据打包为二进制结构字符串
    unpack      将二进制结构字符串解包为算子数据
    lower-case  将字符串转为小写字母
    title-case  将字符串中的第一个字符转为大写字母
    upper-case  将字符串转为大写字母
    strcase     将字符串转为大写字母
    strcat      合并列表,数组或字符串为新的列表, 数组或字符串
    strlen      计算列表中的元素数目或字符串的字符个数
    substr      拆分列表或字符串, 抽取其中的一部分为新列表或字符串
   


<输入输出和文件操作>
    
    print         输出到控制台或设备
    prompt        输出到控制台或设备
    println       输出到控制台或设备并以换行回车结束
    open          打开一个文件, 进行读入或写出
    close         关闭文件
    read-char     从文件中读入一个字节  
    read-line     从文件或控制台读入一行
    read-buffer   从文件中读入二进制数据到缓冲区变量
    read-file     一次读入整个文件
    read-key      从键盘读入一个键值
    write-char    向文件中写出一个字节
    write-line    向文件或控制台写出一行
    write-buffer  将二进制数据写出到文件或字符串   
    write-file    将字符串一次写出到文件
    append-file   将字符串合并到指定文件的末尾
    load          装载源程序文件并求值
    save          保存模块或符号到指定的文件中
    search        按指定的字符串查找文件
    seek          设置或获取文件指针的位置

<数据结构>

    Cstruct-def     定义一个C语言的数据结构
    Cstruct-new     将符号与数据结构关联并初始化
    Cstruct         设置或返回数据结构的成员变量
    sizeof          返回一个结构的数据字节长度


<windows 图形界面>

    alert           显示指定字符串为内容的消息框   
    MessageBox      显示消息框
    InputBox        显示象VB一样的输入框, 返回用户输入的字符串
    window          创建窗口
    dialog          创建对话框
    Skin            切换个性化界面

<windows 注册表操作>

    registry-read          从windows注册表中读取指定的键值
    registry-write         在windows注册表中创建主键或值
    registry-delete        从windows注册表中删除指定的键或值
    registry-descendents   返回指定注册表键的子键或值名称的列表


<COM 扩展接口>

    vbs-run         运行VB script脚本语句
    vbs-eval        返回VB script变量的值
    Acad-init       连接AutoCAD应用程序
    Vlisp-eval      运行Visual Lisp语句,并求值
    Vlisp-command   执行AutoCAD命令

发表于 2008-6-12 13:40 | 显示全部楼层
期待中。。。。。。。。

发表于 2008-6-12 15:55 | 显示全部楼层
如果窗体是写出来的,那可不是太麻烦了
 楼主| 发表于 2008-6-12 16:46 | 显示全部楼层

正如在编程入门时学习 int main{print "Hello World";} 一样,开篇给你领会windows平台的消息传递机制。它告诉你:windows开发高手是怎么炼成的?

面向应用会更多使用对话框与用户交互,和window一样的回调函数,在函数体内进行消息判别与分发,当然我们借助资源编辑器在界面设计会简单些。

如果你希望封装的界面,VB是不错的选择。事实上,在许多情况下,VB仍然使用WIN32 API。

发表于 2008-6-14 15:59 | 显示全部楼层

如果按楼主的要求,我们都得是WINDOWS的编程高手才行,这种要求很好,但大部份人并没有这么多的时间来学习。

从我个人的角度,我讨厌C,因为它对大小写都那么的敏感,而用入门也并不容易,对于我们只是应用的人来讲,学那相对要很多的时间。

当然,如果要想成为WINDOWS世界的高手,你可能非C系列的语言不可,但你得有时间。

 楼主| 发表于 2008-6-15 13:50 | 显示全部楼层
语言是交流的工具,习惯于C语言编程的人接触Lisp之初也会不太适应Lisp的“过多的嵌套括号”,不同程序语言的语法存在差异。天下找不到让每个人都说好的鞋子,不管鞋的价格如何,你一定会说:合脚的鞋子最好。
计算机语言的对象是人与机器,C语言是高级的汇编,和汇编语言相比,C语言屏蔽了对CPU寄存器的直接操作,具有更好的移植性,更倾向于与人的交互,特征是:面向内存的指针显得尤其灵活(使用不当也容易出错)。Lisp语言则更贴近于人的“会话”,它屏蔽了寄存器与内存直接操作,运行时才确定类型使得编程者不太关心变量的使用前声明,这是很多Lisper喜爱的原因之一。
具有解释型语言特点的Lisp象个贴心的朋友与你促膝相谈,每一个语句能得到了对方回应,让你感到踏实,即使初学者也能通过单步跟踪、调试找出错误问题所在。在编译型语言里必须先编译后运行,计算机就像是在听你的演讲,没有过程中间的信息反馈,这也是让初学编程的人却步的原因所在。
当你熟悉Autolisp语言后,试图用Lisp语言来解决图形处理之外的一些数据处理时,你会束手无策,学习另外的语言来编程,这是一种无奈的选择。算子语言使得程序员可以保持Lisp语言的风格,在不同的应用中得以拓展,满足不同领域编程的不同需求。此外算子语言的中文内核使汉语编程更加简单,让更多的人加入到中文编程中来。


您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-2 11:42 , Processed in 1.997977 second(s), 19 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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