找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

楼主: Highflybird

[研讨] 如何能在本函数内实现return的效果或者goto的效果呢?

[复制链接]

已领礼包: 51个

财富等级: 招财进宝

发表于 2013-5-9 13:04:42 | 显示全部楼层
本帖最后由 Lispboy 于 2013-5-9 13:11 编辑

这个程序我怎么感觉好像是为了递归而递归尼? 递归不应该这样用的,程序里面仅仅是交互时候参数的判断选择,应该在一个WHILE循环里面做。

递归的算法流程应该是清晰的,就是在满足某个条件时都要固定重复要做一件事。递归的语句前应该是其他条件满足时候处理的代码,遇到"最后这个条件“时候又要重复做上面的事情。

一般都是写成函数,不应该交互中断的处理过程,用户交互就可能造成程序的破坏,如堆栈空间的破坏。

[pcode=lisp,true]
(while (and
         (progn
           (princ (strcat "\n\n当前为" ca:row "列模式; 长度单位 " ca:c_m
                          ";列间距 " (rtos ca:h_ 2 1) "; 文本字高 "
                          (rtos ca:hh 2 2) "; 对齐方式 " ca:jm "。\n"
                  )
           )
           (initget 1 "U N C F H J")
           (setq pt1 (getpoint (strcat "列数N/单位U/变更列间距C/自由列间距F/文本字高H/对齐方式J/<给出钢筋总长"
                                       ca:jm "对齐点>: "
                               )
                     )
           )
         )
         (cond
           ((= pt1 "U")
             (if (= ca:c_m "cm")
               (setq ca:c_m "mm"
                     ca:cmm 0.001
               )
               (setq ca:c_m "cm"
                     ca:cmm 0.01
               )
             )
           )
           ((= pt1 "N")
             (if (= ca:r_w 3)
               (setq ca:r_w 2
                     ca:row "二"
               )
               (setq ca:r_w 3
                     ca:row "三"
               )
             )
           )
           .......
           (t
           )
         )
       )
)

[/pcode]

点评

不是为了递归而递归,最早完成这段程序(或类似代码)的时候,我还不太清楚递归概念,只听说过这个词而已,当时论坛也稀有谈及,只是感觉使用方便,并且用惯了goto,根本没想到许多。 说起来,当时也知道Lisp括号是  详情 回复 发表于 2013-5-9 14:22

评分

参与人数 1D豆 +10 收起 理由
XDSoft + 10 技术引导讨论!

查看全部评分

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

使用道具 举报

已领礼包: 6530个

财富等级: 富甲天下

发表于 2013-5-9 14:22:37 | 显示全部楼层
Lispboy 发表于 2013-5-9 13:04
这个程序我怎么感觉好像是为了递归而递归尼? 递归不应该这样用的,程序里面仅仅是交互时候参数的判断选择 ...

不是为了递归而递归,最早完成这段程序(或类似代码)的时候,我还不太清楚递归概念,只听说过这个词而已,当时论坛也稀有谈及,只是感觉使用方便,并且用惯了goto,根本没想到许多。
说起来,当时也知道Lisp括号是严格匹配的,但根本没想到那么多深层的意义,只是使用而已,多年不搞,最近又拿起来玩玩,才又多了点感悟。

评分

参与人数 1D豆 +10 收起 理由
XDSoft + 10 技术引导讨论!

查看全部评分

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

使用道具 举报

已领礼包: 145个

财富等级: 日进斗金

发表于 2013-5-9 14:35:30 | 显示全部楼层
ll_j 发表于 2013-5-9 14:22
不是为了递归而递归,最早完成这段程序(或类似代码)的时候,我还不太清楚递归概念,只听说过这个词而已 ...

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-28 00:36 , Processed in 0.416786 second(s), 36 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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