注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

小萝卜头的天空

博主:蔡建伟 QQ:95818608 QQ群:82109567

 
 
 

日志

 
 

LISP循环语句练习1.LSP  

2015-01-25 19:39:25|  分类: 以前博文 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

LISP循环语句练习1.LSP


;;;请问lisp 退出本次循环继续下次循环 与 完全终止循环体 怎么弄啊?
;;;有没有其它语言中类似于continue与break之类的关键词?
;;;
;;;假设A=3.4
;;;从列表(1 2 3 4 5 6)中找出第一个大于A的元素的位置。
;;;功能简单,但不太晓得怎么样编得比较精练。

(setq A 3.4)
(setq LST '(1 2 3 4 5 6))

;;;方法1 完全遍历表, 如果满足条件,就储存需要的值。
(defun TT1 (A LST / TMP I RETURN)
  (setq	TMP t
	I 0
  )
  (foreach X LST
    (and TMP
	 (< X A)
	 (setq I (1+ I))
	 (setq RETURN I) ;_Rev 12/9/06
    )
  )
  RETURN
)


;;;方法2 一个是用while,当满足条件就退出
(defun TT2 (A LST / TMP I RETURN)
  (setq	TMP t
	I 0
  )
  (while (and (cdr LST)
	      TMP
	 )
    (and (> (car LST) A) (setq RETURN I) (setq TMP NIL)) ;_Rev 12/9/06
    (and TMP (setq I (1+ I)))
    (setq LST (cdr LST))
  )
  RETURN
)

;;;方法3 将A添加到表内排序后取得A的位置
(defun TT3 (A LST)
  (vl-position A (vl-sort (cons A LST) '<))
)


 
;|_$ (TT1 A LST)
3
_$ (TT2 A LST)
3
_$ (TT3 A LST)
3

还可以用repeat循环。 几个用法各有优劣。可以多试试,取得最好的一个。
|;

  评论这张
 
阅读(177)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018