找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1552|回复: 5

[LISP函数]:defun 的问题

[复制链接]
发表于 2004-12-18 18:29:12 | 显示全部楼层 |阅读模式

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

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

×
(defun c:nn(/  pt1 pt2 pt3)......)与(defun c:nn(pt1 pt2 pt3)......)与(defun c:nn()......)在程序使用中会有什么区别?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
发表于 2004-12-18 18:31:31 | 显示全部楼层
全局变量和局部变量!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2004-12-18 20:18:49 | 显示全部楼层
(defun c:nn(pt1 pt2 pt3)......)的意思是nn需要参数,能用么?怎样输入参数?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 488个

财富等级: 日进斗金

发表于 2004-12-18 20:57:48 | 显示全部楼层
参数都不懂呀,慢慢来吧

(defun abc(x y z) ....)

调用时
  ...
  (setq xx 1 yy 2 zz 3)
  (abc xx yy zz) ...对应上面的x y z
就相当于你调用时,x y z你已经知道是什么了,代入你的函数中.
不知道说明白没? :)

a = x + y + z+100
代入x y z 求a
就是这意思


有点好为人师的味道:)不要笑我.

(defun abc1(/ x y z)
...)
一旦执行完abc1 ,里面定义的x y z就自动消失了,而且其他函数 有同名的变量时,不会相互影响。就是局部变量的意思
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2004-12-18 21:31:42 | 显示全部楼层
1.格式“(defun nn(... / ...)...)”是定义内部函数。
2.格式“(defun c:nn(... / ...)...)”是定义外部函数,也就是可以在命令行使用“命令”“nn”执行的函数。函数名称后面是参数列表(可能为空),格式为“形参 / 局部变量”。
以下面一段代码为例:
[php](defun test(a b / c)
  (setq c (+ a b))
  (setq d (- a b))
  (princ c)
  (princ d)
)[/php]
a.“形参”是在“执行”函数时同时需要提供的条件。就是上面例子中的“a”和“b”,运行函数“test”的格式为“(test a b)”,如“(test 23.5 34)”。
b.“局部变量”就是函数中临时使用的变量名称。就是上面例子中的“c”,这里有点像“变量申明”,说明变量名在本函数中临时使用,不影响其他函数及环境,如果无此“申明”(如变量“d”),变量将作为全局变量,在运行程序的当前图形中有效。
c.由于Lisp不能接受自由数量的形参表(如函数 + 、max等,参数可变),所以不宜定义包含变元的外部函数,比如用“(defun c:test(aa)(princ aa))”定义外部函数c:test是允许的,但此时的test“命令”不能在命令行“执行”,只能使用“(c:test "ABCD”)方式运行,这就丧失“外部函数”的意义。
d.同样,如果定义的外部函数不包括形参,也不能使用“(c:nn xx)”方式运行。
[I]可以使用其他语言定义自由变元的外部函数,如“c:cal”函数,可以在命令行以cal“命令”形式运行,也可以用“(c:cal string)”方式运行(也可以以“(cal string)”方式运行,这是同时定义了cal内部函数的缘故)。[/I]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2004-12-18 22:54:24 | 显示全部楼层
多谢各位,我明白了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-9-27 17:37 , Processed in 0.187640 second(s), 40 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

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