Rooster 发表于 2022-7-6 14:22:09

lisp中的选项

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

The Buzzard 发表于 2022-7-6 14:27:04

 
 
我觉得这样更好。
 
(cond
((= OPT "1")(Then DO 1))
((= OPT "2")(Then DO 2))
((= OPT "3")(Then DO 3))
((= OPT "4")(Then DO 4))
)

The Buzzard 发表于 2022-7-6 14:30:47

 
 
关于(然后执行1))等。
不确定是要转到另一个函数,还是要设置变量或其他什么。
 
如果你发布代码,我会有更好的主意。

The Buzzard 发表于 2022-7-6 14:32:10

你也可以改变选择,这取决于你。

Rooster 发表于 2022-7-6 14:36:16

 
谢谢Buzzard-代码尚未编写!我想我想要的是有4个独立的函数,让用户输入决定运行这4个函数中的哪一个。
 
我需要做什么来询问用户的选择?(即,问题出现在屏幕上,LISP暂停输入,然后将该输入分配给告诉LISP运行哪个函数的变量)

The Buzzard 发表于 2022-7-6 14:40:22

 
类似这样:
 
(setq OPT "1")
(setq OPT (getstring "\nSelect an option 1-4: < 1 > "))

The Buzzard 发表于 2022-7-6 14:42:39

 
类似这样:
 
(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
)

Lee Mac 发表于 2022-7-6 14:47:00

 
最好使用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))

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

BIGAL 发表于 2022-7-6 14:47:55

如果您有下拉菜单或工具栏,您可以将选项编号作为命令编码到其中
^c^c(setq opt 1)(加载“mymassivelisp”)

Lee Mac 发表于 2022-7-6 14:51:33

 
这将使变量“opt”成为全局变量-当然不是您想要的。。。
页: [1] 2
查看完整版本: lisp中的选项