lisp中的选项
对于书写Lisp程序,请耐心一点&把我当成一个一无所知的白痴!!我在写一个简单的LISP。我需要从用户那里获得他们想要的4个选项中的哪一个的输入,然后运行所选的选项。有人能帮我解决这个问题吗?以下是我想用普通语言做的事情,我需要将其翻译成LISP语言:
-请用户选择:选项1、选项2、选项3或选项4(如果没有选择任何选项,则需要再次提问,直到做出有效选择)
-如果选择=选项1,则执行O1
-如果选择=选项2,则执行O2
-如果选择=选项3,则执行O3
-如果选择=选项4,则执行O4
希望这有意义。如果没有,请询问!
我觉得这样更好。
(cond
((= OPT "1")(Then DO 1))
((= OPT "2")(Then DO 2))
((= OPT "3")(Then DO 3))
((= OPT "4")(Then DO 4))
)
关于(然后执行1))等。
不确定是要转到另一个函数,还是要设置变量或其他什么。
如果你发布代码,我会有更好的主意。 你也可以改变选择,这取决于你。
谢谢Buzzard-代码尚未编写!我想我想要的是有4个独立的函数,让用户输入决定运行这4个函数中的哪一个。
我需要做什么来询问用户的选择?(即,问题出现在屏幕上,LISP暂停输入,然后将该输入分配给告诉LISP运行哪个函数的变量)
类似这样:
(setq OPT "1")
(setq OPT (getstring "\nSelect an option 1-4: < 1 > "))
类似这样:
(cond
((= OPT "1")(OPT1)) ;GOTO FUNCTION OPT1
((= OPT "2")(OPT2)) ;GOTO FUNCTION OPT2
((= OPT "3")(OPT3)) ;GOTO FUNCTION OPT3
((= OPT "4")(OPT4)) ;GOTO FUNCTION OPT4
)
最好使用getkword函数。
有很多方法可以完成这项任务。
最简单的版本:
(initget 1 "Yes No")
(setq ans (getkword "\nYes or No? :"))
但如果你想要违约:
(initget "Yes No")
(setq ans (getkword "\nYes or No? <Yes> :"))
(and (not ans) (setq ans "Yes"))
但这可以在许多方面做得更详细。。。。
您可以使用WHILE循环来过滤不正确的条目:
(while
(progn
(setq ans
(cond ((getint "\nSpecify Number <3>: "))
(3)))
(if (not (vl-position ans '(1 2 3)))
(princ "\nIncorrect Selection!"))))
或者,您可以使用全局变量来保存默认值:
(or *ans* (setq *ans* "A"))
(initget "A B C")
(or (not
(setq ans
(getkword
(strcat "\nSelect a Letter <" *ans* ">: "))))
(setq *ans* ans))
只是提供了几个选项-有很多方法可以做到这一点
李 如果您有下拉菜单或工具栏,您可以将选项编号作为命令编码到其中
^c^c(setq opt 1)(加载“mymassivelisp”)
这将使变量“opt”成为全局变量-当然不是您想要的。。。
页:
[1]
2