明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
楼主: aroom

TeaScript 编程(二次开发AutoCAD、Lisp写windows应用程序)

    [复制链接]
发表于 2012-5-30 19:16:16 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
发表于 2012-5-30 21:32:17 | 显示全部楼层
学习了,谢谢楼主分享
发表于 2012-5-31 08:23:58 | 显示全部楼层
谢谢分享,不错的!
发表于 2012-5-31 20:36:25 | 显示全部楼层
楼主举个cad环境下用的例子看看,比如一个lisp程序,然后用TeaScript 改写,然后关键是,改写后的程序如何用啊???
lisp,我们只要加载,然后命令就有了,CAD下就可以用了。这个语言写的如何加载,如何用??
发表于 2012-5-31 21:34:00 | 显示全部楼层
发表于 2012-5-31 22:00:49 | 显示全部楼层
又多了一件开发CAD的语言,还是专心学习LISP吧
 楼主| 发表于 2012-6-1 03:05:38 | 显示全部楼层
本帖最后由 aroom 于 2012-6-5 00:37 编辑

TeaScript QQ群 群友问题

★~★(741378784) 21:27:52
机器人靠指令行走,如 l100r50r10 其中 l 是向左转,r 是向右转,中间的数字是行走的距离
现在要求输入 n 条指令,并求出每条指令移动后的位置与起点位置的距离。结果保留两位小数。
例:
输入
l100
l100r50r10
l5l5l5l5
输出
100.0
102.96
0.0
★~★(741378784) 21:27:58
求思路


TeaScript 编程 (Lisp 语法版)

(defun getdist( / instr x y dir lst v) ;; 定义getdist函数   / 局部变量   
    (while (setq instr (readLine)) ;; 循环从键盘取得输入数值
           (if (== "" instr)(break)) ;; 如果输入是个空行,结束后续计算,退出
           (setq x 0 y 0 dir 0) ;; 初始化坐标值, 假定机器人初始面向x轴        
           (setq lst (findAll /[l|L|r|R]\d+/ instr)) ;; 从输入行中找出l或r开头的数值,放入lst列表中 (字母忽略大小写)
           (println lst) ;; 可以忽略,辅助显示lst列表结果
           (if lst  
               (mapcar (fn (e)
                               (setq v (int (cdr e))) ;; 抛弃开头字母,转为数值
                               (if (startsWith e "L" 1) ;; 判别方向(字母忽略大小写)
                                   (progn
                                     (cond
                                        ((== (abs (% dir 4)) 0)(++ y v))
                                        ((== (abs (% dir 4)) 1)(-- x v))
                                        ((== (abs (% dir 4)) 2)(-- y v))
                                        (true (++ x v)))
                                      (++ dir))                              
                                   (progn
                                     (cond
                                        ((== (abs (% dir 4)) 0)(-- y v))
                                        ((== (abs (% dir 4)) 1)(++ x v))
                                        ((== (abs (% dir 4)) 2)(++ y v))
                                        (true (-- x v)))
                                      (-- dir))
                              ))   
                   lst)  ;; 对lst列表中的每个元素(字符串),进行lambda分析
           )
           (println "ordinate, x: " x ", y: " y) ;; 可以忽略,辅助显示x y 坐标
           (println "distance: " (round (sqrt (+ (* x x)(* y y))) -2)) ;; 最后输出结果 dist = x*x + y*y 的平方根              
    )   
)
(getdist) ;; 调用函数

;; 启动TeaScript.exe(console模式), 将上面代码复制,粘贴到控制台窗口中执行








TeaScript 编程 (JavaScript 语法版)

function getdist(){  // 定义getdist函数  
    while (instr = readLine()){ // 循环从键盘取得输入数值
           if (instr == "") break; // 如果输入是个空行,结束后续计算,退出
           var x = 0, y = 0, dir = 0, lst; // 初始化坐标值, 假定机器人初始面向x轴        
           lst = findAll(/[l|L|r|R]\d+/, instr); // 从输入行中找出l或r开头的数值,放入lst列表中 (字母忽略大小写)
           println(lst); // 可以忽略,辅助显示lst列表结果
           if (not null?(lst)){  
               mapcar(function (e){
                               var v = int(cdr(e));  // 抛弃开头字母,转为数值
                               if (startsWith(e, "L", 1)){ // 判别方向(字母忽略大小写)
                                    if(abs(dir%4) == 0) y += v;
                                    else if (abs(dir%4) == 1) x -= v;
                                    else if (abs(dir%4) == 2) y -= v;
                                    else x += v;
                                    dir++;                              
                               } else {
                                    if(abs(dir%4) == 0) y -= v;
                                    else if (abs(dir%4) == 1) x += v;
                                    else if (abs(dir%4) == 2) y += v;
                                    else x -= v;
                                    dir--;
                              }   
                   }, lst);  // 对lst列表中的每个元素(字符串),进行lambda分析
           }
           println("ordinate, x: ", x, ", y: ", y); // 可以忽略,辅助显示x y 坐标
           println("distance: ", round(sqrt(x*x + y*y),-2)); // 最后输出结果 dist = x*x + y*y 的平方根              
    }   
}
getdist() // 调用函数

// 启动TeaScript.exe(console模式), 将上面代码复制,粘贴到控制台窗口中执行

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
发表于 2012-6-1 08:19:10 | 显示全部楼层
发表于 2012-6-1 14:34:11 | 显示全部楼层
期待更详细的教程!
发表于 2012-6-3 10:30:24 | 显示全部楼层
楼主举个cad环境下用的例子看看,比如一个lisp程序,然后用TeaScript 改写,然后关键是,改写后的程序如何用啊???
lisp,我们只要加载,然后命令就有了,CAD下就可以用了。这个语言写的如何加载,如何用??


深有同感
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-18 06:24 , Processed in 0.163471 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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