找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 1269|回复: 14

[研讨] ll_j 大师,这样的语法结构合不合理?

[复制链接]

已领礼包: 3198个

财富等级: 富可敌国

发表于 2015-7-17 12:59:44 | 显示全部楼层 |阅读模式

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

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

×
本帖最后由 lucas3 于 2015-7-17 14:21 编辑

请教各位lisp前辈,大师,这个的语法结构合不合理?

  1. (defun main (/ v1 v3 subfun1 subfun2)
  2.   (setq v1 (......))
  3.   (defun subfun1(/ v2)
  4.                 (setq v2 (.....))
  5.                 (setq v3 (......))
  6.     ......
  7.   );;end_defun_subfun1
  8.   (defun subfun2(/ subb v4 v5 v6)
  9.     (defun subb(/ a b c)
  10.       (setq a (...))
  11.                   (setq b (...))
  12.                   (setq c (*(atoi v6) 10))
  13.     );;end_defun_subb
  14.     (setq v4 (.....))
  15.     (setq v5 (*(atoi v3) 13))
  16.     (setq v6 (.....))    (subb)
  17.   );;end_defun_subfun2
  18. );;end_defun_main

那这个呢? 和以上相比

  1. (defun main (/ v1 v3 subfun1 subfun2 subb)
  2.   (setq v1 (......))
  3.   (defun subfun1(/ v2)
  4.     (setq v2 (.....))
  5.     (setq v3 (......))
  6.     ......
  7.   );;end_defun_subfun1
  8.   (defun subfun2(/ v4 v5 v6)
  9.     (setq v4 (.....))
  10.     (setq v5 (*(atoi v3) 13))
  11.     (setq v6 (.....))
  12.     (subb)
  13.   );;end_defun_subfun2
  14.   (defun subb(/ a b c)
  15.     (setq a (...))
  16.     (setq b (...))
  17.     (setq c (*(atoi v6) 10))
  18.   );;end_defun_subb
  19. );;end_defun_main






评分

参与人数 1D豆 +10 收起 理由
XDSoft + 10 出题引导交流奖!

查看全部评分

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

已领礼包: 604个

财富等级: 财运亨通

发表于 2015-7-17 13:03:41 | 显示全部楼层
ll_j 大师忙得很,先我来回答你,存在即合理

点评

见很多程序,无一个局部变量,全是全局变量, 单独运行没问题, 谁知道以后加载的程序多了,会不会冲突? 所以养成一个良好的习惯,是一开好的开始.  详情 回复 发表于 2015-7-17 14:20
这个回答 不满意!  详情 回复 发表于 2015-7-17 13:07
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3198个

财富等级: 富可敌国

 楼主| 发表于 2015-7-17 13:07:09 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2015-7-17 13:03
ll_j 大师忙得很,先我来回答你,存在即合理

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

使用道具 举报

已领礼包: 3198个

财富等级: 富可敌国

 楼主| 发表于 2015-7-17 14:20:32 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2015-7-17 13:03
ll_j 大师忙得很,先我来回答你,存在即合理

见很多程序,无一个局部变量,全是全局变量,
单独运行没问题, 谁知道以后加载的程序多了,会不会冲突?
所以养成一个良好的习惯,是一开好的开始.
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2015-7-17 14:24:43 | 显示全部楼层
lucas3 发表于 2015-7-17 14:20
见很多程序,无一个局部变量,全是全局变量,
单独运行没问题, 谁知道以后加载的程序多了,会不会冲突?
所 ...

你可以参考一下
http://www.xdcad.net/forum/thread-677209-1-1.html
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2015-7-17 15:10:10 来自手机 | 显示全部楼层
这几天看了c++关于函数参数的解释,alisp也是c++写的解释器,参数名只是一个形式,阿猫,阿狗都无所谓,函数体内用的是“值”,alisp不像c++可以自动回收变量,函数体内的变量生存期只在函数体内部,alisp要想回收函数体的变量必须把名称放到 / 后面

点评

大师, 俺读书少,理解能力差, 大师抽个几分钟仔细看看上面的代码 ,给分析点评下哪里不合理.谢谢! 比如,有几个变量 在几个不同的函数中都有引用到, 局部变量定义都合理吗?  详情 回复 发表于 2015-7-17 15:31
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2015-7-17 15:27:57 | 显示全部楼层
csharp 发表于 2015-7-17 15:10
这几天看了c++关于函数参数的解释,alisp也是c++写的解释器,参数名只是一个形式,阿猫,阿狗都无所谓,函 ...

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

使用道具 举报

已领礼包: 3198个

财富等级: 富可敌国

 楼主| 发表于 2015-7-17 15:31:24 | 显示全部楼层
csharp 发表于 2015-7-17 15:10
这几天看了c++关于函数参数的解释,alisp也是c++写的解释器,参数名只是一个形式,阿猫,阿狗都无所谓,函 ...

大师, 俺读书少,理解能力差, 大师抽个几分钟仔细看看上面的代码 ,给分析点评下哪里不合理.谢谢!

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

使用道具 举报

已领礼包: 604个

财富等级: 财运亨通

发表于 2015-7-17 15:34:47 | 显示全部楼层
本帖最后由 /db_自贡黄明儒_ 于 2015-7-17 15:37 编辑
lucas3 发表于 2015-7-17 15:31
大师, 俺读书少,理解能力差, 大师抽个几分钟仔细看看上面的代码 ,给分析点评下哪里不合理.谢谢!

比如, ...

(setq v5 (*(atoi v3) 13))这个不合理 ,V3为nil
如果你不给v3赋值的话

点评

黄大师,你这就认真了, 我是举了一个例, 这个变量V3在这里被引用了  详情 回复 发表于 2015-7-17 15:45
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 859个

财富等级: 财运亨通

发表于 2015-7-17 15:39:38 来自手机 | 显示全部楼层
一般在alisp中函数只需要取返回值,不修改全局变量值l也不要留下全局变量,你按这个规则先改了

点评

最合理的是每个函数都能有返回值 , 可以在其它函数下引用这个函数, 尽量不要在其它函数下引用另一个函数的变量, 是这个意思吧. 这个我知道一点, 但是我也看了**的人的很多程序,或多或少都只引用了变量, 运行  详情 回复 发表于 2015-7-17 16:15
改哪里? 详细地说明下吧  详情 回复 发表于 2015-7-17 15:46
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3198个

财富等级: 富可敌国

 楼主| 发表于 2015-7-17 15:45:12 | 显示全部楼层
/db_自贡黄明儒_ 发表于 2015-7-17 15:34
(setq v5 (*(atoi v3) 13))这个不合理 ,V3为nil
如果你不给v3赋值的话

黄大师,你这就认真了, 我是举了一个例, 这个变量V3在这里被引用了
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3198个

财富等级: 富可敌国

 楼主| 发表于 2015-7-17 15:46:29 | 显示全部楼层
csharp 发表于 2015-7-17 15:39
一般在alisp中函数只需要取返回值,不修改全局变量值l也不要留下全局变量,你按这个规则先改了

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

使用道具 举报

已领礼包: 3198个

财富等级: 富可敌国

 楼主| 发表于 2015-7-17 16:15:45 | 显示全部楼层
本帖最后由 lucas3 于 2015-7-17 16:17 编辑
csharp 发表于 2015-7-17 15:39
一般在alisp中函数只需要取返回值,不修改全局变量值l也不要留下全局变量,你按这个规则先改了

最合理的是每个函数都能有返回值 ,  可以在其它函数下引用这个函数,
尽量不要在其它函数下引用另一个函数的变量, 是这个意思吧.

这个我知道一点, 但是我也看了**很多人的程序,或多或少都只引用了变量,
运行这个函数没有任何返回值,但是运行这个函数后,一个变量被赋值 ,然后其它
函数下就会调用这个变量 ,那么问题来啦,

如果非要用这样的一个方式, 上面的程序定义局部变量是否合理呢?

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

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2015-7-20 10:00:50 | 显示全部楼层
好久不搞Lisp,也不是什么大师,结果被点名,不好不来,我就简单说说吧。
两个程序都是函数中定义函数,而且都是被定义成局部子函数(函数名在母函数中被声明成局部变量),从结构本身来说,都是合理的,但是因为嵌套的层次不同,实际使用是有差别的,三个并列的,在主程序退出之前,子函数是可以相互调用的,但更深一层嵌套的子函数就不能被另一个高一层的子函数调用了。
比如:在第一种定义中,函数subfun1是可以调用subfun2的,但不可以调用subb,但第二种定义中则可以,这是因为,第一种定义中,在函数subfun2在执行时才定义subb,而执行结束,会把subb清除(局部变量),所以,对subfun1来说,subb是不存在的,但第二种定义则是执行主程序时,三个子函数都已经被定义。
即使定义的都是全局函数,也会因为定义的先后次序关系,使得使用上有差异,在两种定义中,假定所有函数名都不被声明成局部变量,也就是说,这些函数在使用一次后都将永久存在,那么第二种定义没有什么限制,但第一种定义中,如果你先执行subfun1,而此时subfun2没有被执行,则subfun1将不能调用subb。
除此之外,函数的执行过程和嵌套子函数的定义顺序也应当注意,在一个函数被定义之前,是不能被执行或调用的,所以,一般可以把所有子函数的定义放在主程序的开始,所有子函数定义完成后再执行程序内容。
不多说了,有兴趣还可以看看我的:http://bbs.xdcad.net/thread-673371-1-1.html

点评

谢谢ll_j大师指点, 大师指点下, 胜读十本书啊  详情 回复 发表于 2015-7-20 10:23
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 3198个

财富等级: 富可敌国

 楼主| 发表于 2015-7-20 10:23:05 | 显示全部楼层
ll_j 发表于 2015-7-20 10:00
好久不搞Lisp,也不是什么大师,结果被点名,不好不来,我就简单说说吧。
两个程序都是函数中定义函数,而 ...

谢谢ll_j大师指点, 大师指点下, 胜读十本书啊{:soso_e113:}
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-22 11:07 , Processed in 0.428182 second(s), 57 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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