乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 52|回复: 19

[编程交流] lisp中的选项

[复制链接]

14

主题

78

帖子

64

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-6 14:22:09 | 显示全部楼层 |阅读模式
对于书写Lisp程序,请耐心一点&把我当成一个一无所知的白痴!!
 
我在写一个简单的LISP。我需要从用户那里获得他们想要的4个选项中的哪一个的输入,然后运行所选的选项。有人能帮我解决这个问题吗?以下是我想用普通语言做的事情,我需要将其翻译成LISP语言:
 
-请用户选择:选项1、选项2、选项3或选项4(如果没有选择任何选项,则需要再次提问,直到做出有效选择)
-如果选择=选项1,则执行O1
-如果选择=选项2,则执行O2
-如果选择=选项3,则执行O3
-如果选择=选项4,则执行O4
 
希望这有意义。如果没有,请询问!
回复

使用道具 举报

32

主题

1166

帖子

1146

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2022-7-6 14:27:04 | 显示全部楼层
 
 
我觉得这样更好。
 
  1. (cond
  2. ((= OPT "1")(Then DO 1))
  3. ((= OPT "2")(Then DO 2))
  4. ((= OPT "3")(Then DO 3))
  5. ((= OPT "4")(Then DO 4))
  6. )
回复

使用道具 举报

32

主题

1166

帖子

1146

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2022-7-6 14:30:47 | 显示全部楼层
 
 
关于(然后执行1))等。
不确定是要转到另一个函数,还是要设置变量或其他什么。
 
如果你发布代码,我会有更好的主意。
回复

使用道具 举报

32

主题

1166

帖子

1146

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2022-7-6 14:32:10 | 显示全部楼层
你也可以改变选择,这取决于你。
回复

使用道具 举报

14

主题

78

帖子

64

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
70
发表于 2022-7-6 14:36:16 | 显示全部楼层
 
谢谢Buzzard-代码尚未编写!我想我想要的是有4个独立的函数,让用户输入决定运行这4个函数中的哪一个。
 
我需要做什么来询问用户的选择?(即,问题出现在屏幕上,LISP暂停输入,然后将该输入分配给告诉LISP运行哪个函数的变量)
回复

使用道具 举报

32

主题

1166

帖子

1146

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2022-7-6 14:40:22 | 显示全部楼层
 
类似这样:
 
  1. (setq OPT "1")
  2. (setq OPT (getstring "\nSelect an option 1-4: < 1 > "))
回复

使用道具 举报

32

主题

1166

帖子

1146

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
159
发表于 2022-7-6 14:42:39 | 显示全部楼层
 
类似这样:
 
  1. (cond
  2. ((= OPT "1")(OPT1)) ;GOTO FUNCTION OPT1
  3. ((= OPT "2")(OPT2)) ;GOTO FUNCTION OPT2
  4. ((= OPT "3")(OPT3)) ;GOTO FUNCTION OPT3
  5. ((= OPT "4")(OPT4)) ;GOTO FUNCTION OPT4
  6. )
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:47:00 | 显示全部楼层
 
最好使用getkword函数。
 
有很多方法可以完成这项任务。
 
最简单的版本:
 
  1. (initget 1 "Yes No")
  2. (setq ans (getkword "\nYes or No? :"))

 
但如果你想要违约:
 
  1. (initget "Yes No")
  2. (setq ans (getkword "\nYes or No? <Yes> :"))
  3. (and (not ans) (setq ans "Yes"))

 
但这可以在许多方面做得更详细。。。。
 
您可以使用WHILE循环来过滤不正确的条目:
 
  1. (while
  2. (progn
  3.    (setq ans
  4.      (cond ((getint "\nSpecify Number [1/2/3] <3>: "))
  5.            (3)))
  6.    (if (not (vl-position ans '(1 2 3)))
  7.      (princ "\nIncorrect Selection!"))))

 
或者,您可以使用全局变量来保存默认值:
 
  1. (or *ans* (setq *ans* "A"))
  2. (initget "A B C")
  3. (or (not
  4.      (setq ans
  5.        (getkword
  6.          (strcat "\nSelect a Letter [A/B/C] <" *ans* ">: "))))
  7.    (setq *ans* ans))

 
只是提供了几个选项-有很多方法可以做到这一点
 
回复

使用道具 举报

106

主题

1万

帖子

101

银币

顶梁支柱

Rank: 50Rank: 50

铜币
1299
发表于 2022-7-6 14:47:55 | 显示全部楼层
如果您有下拉菜单或工具栏,您可以将选项编号作为命令编码到其中
^c^c(setq opt 1)(加载“mymassivelisp”)
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 14:51:33 | 显示全部楼层
 
这将使变量“opt”成为全局变量-当然不是您想要的。。。
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-5 02:55 , Processed in 0.810295 second(s), 83 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表