明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 4396|回复: 19

[经验] 终于搞清楚cond用法了

[复制链接]
发表于 2019-9-29 23:54:17 | 显示全部楼层 |阅读模式
本帖最后由 小万LISP 于 2019-9-30 14:12 编辑

之前用cond总出错,以至于放弃,葵花宝典里的解释又很简单。我来稍微 详细点的用法介绍吧,如有错误请指正哈!
方法一:
  • (setq h (getint"\n请输入数值序号:"))
  • (cond
  •   ((= h 1) (setq h 250))
  •   ((= h 2) (setq h 550))
  •   ((= h 3) (setq h -370))
  •   ((= h 4) (setq h -740))
  •   (T h)
  • )
  • (print h)


方法二:
  • (setq h (getint"\n请输入数值序号:"))
  • (setq h
  •   (cond
  •     ((= h 1)250)
  •     ((= h 2)550)
  •     ((= h 3)-370)
  •     ((= h 4)-740)
  •     (T h)
  •   )
  • )
  • (print h)


OK!

发表于 2019-9-30 19:03:15 | 显示全部楼层
You can use list in this case :
  1. (while
  2.   (not
  3.     (setq h
  4.       (cdr
  5.         (assoc
  6.           (getint "\nPlease enter the numeric number: ")
  7.           '((1 . 250)(2 . 550)(3 . -370)(4 . -740))
  8.         )
  9.       )
  10.     )
  11.   )
  12.   (print "Requires an integer between 1 and 4.")
  13. )
回复 支持 1 反对 0

使用道具 举报

发表于 2019-9-30 16:35:50 | 显示全部楼层
cond函数只是测试,与赋值是无关的,楼主的第一种用法是常用的方法,第二种方法虽然正确,但不太常用,并不是效率问题,而是“自由度”问题。
在第一种方法中,先对某个“条件”进行测试,根据满足条件对变量赋值,而这个赋值过程却可以是其它“结果”,可以对h赋值,也可以对其它变量赋值,还可以调用其它函数,但在方法二中,只是在对某个变量的赋值过程中,根据条件进行赋值,相对就不够“自由”,当然,对“结果”也可以是有其它变化,但结构就会显得复杂。所以说,第一种方法更“自由”一些。
就cond函数本身,当测试的“条件”不是很“互斥”时,要注意相互的次序,因为从上到下测试到满足某个条件时,测试就不在向下进行,而最后的t测试(真)是“容错”的意思,就是上面所有条件都不满足的时候才执行的(此时应该是有效输入,一般由initget函数控制)。在楼主的帖子中,除了输入1~4以外,都会对h赋值输入的值,可能是数值5,也可能是字符串ab,这就有可能是自己不需要的,甚至可能是后面代码没法接受的,这就需要在前面做限制(见initget函数的控制位)。
发表于 2019-9-30 13:02:55 | 显示全部楼层
本帖最后由 wyl219 于 2019-10-14 20:40 编辑

(while (not h)
(setq h (getint (strcat "\n请输入高度,或选择预置高度:\n"
                                                                "1.250 2.550 3.-370 4.-740")))
(setq h
        (cond
                ((not h) (print "输入错误,请重新输入") nil)
                 ((= h 1)250)
    ((= h 2)550)
    ((= h 3)-370)
    ((= h 4)-740)
                (t h)
        )
))
发表于 2019-9-30 01:30:22 | 显示全部楼层
写得很好,欢迎入坑,
 楼主| 发表于 2019-9-30 07:58:54 | 显示全部楼层
ysq101 发表于 2019-9-30 01:30
写得很好,欢迎入坑,

感谢鼓励!
发表于 2019-9-30 09:29:22 | 显示全部楼层
如果输入了1~4之外的值怎么办?
最好在cond最后一行加一句:
(T (setq h "输入值有误。"))
发表于 2019-9-30 11:18:57 | 显示全部楼层
代码考虑不全呀
发表于 2019-9-30 11:22:01 | 显示全部楼层
原地踏步 发表于 2019-9-30 09:29
如果输入了1~4之外的值怎么办?
最好在cond最后一行加一句:
(T (setq h "输入值有误。"))

经典、完美!!!
 楼主| 发表于 2019-9-30 14:13:11 | 显示全部楼层
原地踏步 发表于 2019-9-30 09:29
如果输入了1~4之外的值怎么办?
最好在cond最后一行加一句:
(T (setq h "输入值有误。"))

谢谢指点谢谢指点
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-5-18 15:59 , Processed in 0.195969 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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