找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1072|回复: 9

[求助] [求助]:如何在lisp中定义的函数传入整体变量,不知传入参数的格式如何规定,寻求帮助

[复制链接]
发表于 2005-9-6 09:39:23 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

×
如何向lisp中定义的函数传入整体变量
如下所示:
(defun C:函式名(引數 / 變數) ........)
在调用该函式名时,参数格式如何写?
我写的函数带一个参数可用,带两个参数就不行了,不知参数
中间用什么符号间隔~~~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 8156个

财富等级: 富甲天下

发表于 2005-9-6 09:55:36 | 显示全部楼层
------  函式名     (引数1   引数2  /  变量1  变量2)
    (defun  MAssoc              (Key      alist      /      tmp         pts)
       (reverse
         (progn
           (while (setq tmp (assoc key aList))
             (setq aList (cdr (member tmp aList))
                  pts (cons (cdr tmp) pts)
           ) )
           pts
         ) ;_ closes progn
       ) ;_ closes reverse
    ) ;_ closes defun MAssoc
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-9-6 10:08:54 | 显示全部楼层
多谢楼上的指点,但是调用该函数时是不是这样
(MAssoc "Key alist")
如果有多个整体参数,是不是中间加空格就行了?
(MAssoc "Key alist" "Key alist_1")
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-9-6 10:26:29 | 显示全部楼层
在调用自定义函数时要按照定义函数时所设定的参数来书写,不可以多也不可以少,否则会出错

如果想在调用时多加参数,那需要在定义函数把所有用到的参数都定义了才可以
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8156个

财富等级: 富甲天下

发表于 2005-9-6 10:40:52 | 显示全部楼层
一些使用例子


(massoc 10 (entget (car data)))))

(defun getPagesetups ()
   (massoc 3 (dictsearch (namedobjdict) "Acad_PlotSettings"))
)

(defun GetGroupMembers (ename / names dct ent grouplst lst)
  (and
    (setq names (GetGroupNames ename))
    (setq dct (dictsearch (namedobjdict) "acad_group"))
    (foreach x names
      (setq ent (cdadr (member (cons 3 x) dct)))
      (setq grouplst (massoc 340 (entget ent)))
      (foreach y grouplst
        (if (not (member y lst))
          (setq lst (cons y lst))
        )
      )
    )
  )
  lst
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-9-6 10:44:58 | 显示全部楼层
我定义的函数如下
(defun dxtline (lon lint/ ln lno lltn llint)
  (setq ln (strcase lon))        ;;将传入的参数lon转变为大写,赋予ln
  (setq llint (atof(lint)))
  (if (>= (getvar "ltscale") 8)               
    (setq lltn "dxtline.lin" lno ln)        ;;(strcat ln "X"))        ;;strcat将ln和X组成新串并返回串于ln
    (setq lltn "dxtline.lin" lno ln)        ;;
  );endif
  (if (and
       (/= ln "BYLAYER")        ;;ln不等于"BYLAYER","BYBLOCK","CONTINUOUS"
       (/= ln "BYBLOCK")
       (/= ln "CONTINUOUS")
     )
      (if (null (tblsearch "ltype" lno))        ;;设定ltype线型表为lno线型
        (command "linetype" "load" lno lltn "")
      );endif
  );endif
  (setvar "celtype" lno)
  (command "pline" (getpoint) "w" llint "") ;;设定pline线宽为llint
);endmain

为何我调用时出错,说缺少参数
(DXTLINE "建筑中的高速公路" "0.4")
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 8156个

财富等级: 富甲天下

发表于 2005-9-6 10:56:31 | 显示全部楼层
(defun dxtline (lon lint/ ln lno lltn llint)
(setq ln (strcase lon)) ;;将传入的参数lon转变为大写,赋予ln
(setq llint (atof lint))    ; <=====
.
.
.
);endmain


也可以这样调用
(DXTLINE "建筑中的高速公路" 0.4)

;; (setq llint (atof(lint))) 不用
;; 要替换其下的变量名称
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-9-6 11:04:02 | 显示全部楼层
看不懂,什么意思,是这行代码出错了吗,怎么改?
我需要把lint转化为实数型啊!
请大家帮帮忙~~
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2005-9-6 13:09:20 | 显示全部楼层
[php](defun dxtline (lon lint/ ln lno lltn llint) ;此句少了空格
  (setq ln (strcase lon))
  (setq llint (atof (lint)))                ;此句多了括号
  (if (>= (getvar "ltscale") 8)                ;以下两句完全一样,不必用if
    (setq lltn "dxtline.lin"
          lno  ln
    )
    (setq lltn "dxtline.lin"
          lno  ln
    )
  )
  (if (and
        (/= ln "BYLAYER")
        (/= ln "BYBLOCK")
        (/= ln "CONTINUOUS")
      )
    (if        (null (tblsearch "ltype" lno))
      (command "linetype" "load" lno lltn "")
    )
  )
  (setvar "celtype" lno)
  (command "pline" (getpoint) "w" llint "")
)

;;;修改后
(defun dxtline (lon lint / ln lno lltn llint)
  (setq        ln    (strcase lon)
        llint (atof lint)
  )
  (if (>= (getvar "ltscale") 8)
    (setq lltn "dxtline.lin")
  )
  (if (and
        (/= ln "BYLAYER")
        (/= ln "BYBLOCK")
        (/= ln "CONTINUOUS")
      )
    (if        (null (tblsearch "ltype" ln))
      (command "linetype" "load" ln lltn "")
    )
  )
  (setvar "celtype" lno)
  (command "pline" (getpoint) "w" llint "")
)[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-9-6 14:10:32 | 显示全部楼层
多谢xyp1964 斑竹的详细指导,
我知道我错在哪里了
就是错在少了一个空格上,
你是第一个回复我问题的斑竹,
我将把我写的国标地形图类线型贴出来以示支持!!
虽然可能还不太完美,但是我花了一个多星期做出来的,以供新手参考.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2025-9-28 12:43 , Processed in 0.200156 second(s), 50 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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