neophoible 发表于 2022-7-6 06:54:24

是的,我同意,在这种情况下,人们不得不想为什么需要一个允许空间的T。也许有一个Echoget1或只是Echoget更适合这个任务?

neophoible 发表于 2022-7-6 06:57:41

很高兴能帮上忙。看起来在你发帖的时候我们还在猜测!我真的不明白这部分:你是说你可能需要更多的帮助?

BlackBox 发表于 2022-7-6 07:01:29

 
别担心,迈克;我们都开始了(又一次?)在某处
 
 
迈克,你说得太好了;我很乐意帮忙。
 
考虑这个小例子:

(defun c:FOO ( / oldChoice2)

(setq *choice2* (if *choice2* *choice2* "6"))
   
(initget "6 8 10 12")
(if (and (setq oldChoice2 *choice2*)
          (or (setq *choice2*
                     (getkword
                     (strcat "\nFraming size, 2x... "
                               " <"
                               *choice2*
                               ">: "


                     )
                     )
            )
            (setq *choice2* oldChoice2)
          )
   )
    (prompt
      (strcat "\nYou selected: "
            (cond ((= "6" *choice2*) "(2X6)")
                  ((= "8" *choice2*) "(2X8)")
                  ((= "10" *choice2*) "(2X10)")
                  (T "(2X12)")
            )
      )
    )
)
(princ)
)

BlackBox 发表于 2022-7-6 07:05:42

对不起,我复制了错误的代码片段。。。代码已修订。

neophoible 发表于 2022-7-6 07:06:44

如果你坚持最初的想法,你应该明确所有的选择:

neophoible 发表于 2022-7-6 07:10:39

我将使用与BlackBox相同的基本方法:

(if (not (member 2xtxt '("6" "8" "10" "12"))) (setq 2xtxt "6"))
(initget "6 8 10 12")
(setq choice2 (getkword (strcat
   "\nFraming size: 2x 2x<" 2xtxt ">: "
)             )         )
(if (= "" choice2) (setq choice2 2xtxt) (setq 2xtxt choice2))

BlackBox 发表于 2022-7-6 07:14:02

 
唯一不允许使用2xtxt的方法是,用户手动使用LISP更改它,因此我不介意检查成员。如果这是必要的,并且我不需要来自成员的结果列表元素,为了方便起见,我会使用vl位置。
 
此外,请注意:
 

neophoible 发表于 2022-7-6 07:16:08

是的,很好,黑匣子。在你能够完成回答之前,我修复了最后一项(在括号外取2倍),但这是一个我没有完全注意到的好问题。我将2xtxt视为一个全局变量,这意味着任何程序都可以改变它,包括OP可能编写的程序,尽管人们希望这种情况永远不会发生。这是一个很长的名字,很不寻常,除非是OP。至于vl位置,恐怕我对VLISP了解得太少,所以不可能想出这个名字。谢谢你的提示。

alanjt 发表于 2022-7-6 07:20:18

((lambda (/)
(initget 0 "6 8 10 12")
(strcat "2x"
          (setq *choice* (cond ((getkword (strcat "\nSpecify framing size: 2x <"
                                                (cond (*choice*)
                                                      ((setq *choice* "6"))
                                                )
                                                ">: "
                                          )
                              )
                               )
                               (*choice*)
                         )
          )
)
)
)

spiker7221 发表于 2022-7-6 07:22:50

感谢Blackbox和Neophoible,
代码很好,很紧凑。
 
我的完整例程有3个问题,都使用以下结构。。设置默认值。我可以按enter键或空格键来接受这些默认值,但当我进入最后一个问题时,除非我在命令行中真正键入最终选项,否则它就会爆炸。
 
仅供参考。。。我现在收到一个“错误:错误的参数类型:stringp nil”。这是否意味着存在未重置的变量?
 
谢谢
迈克
页: 1 [2]
查看完整版本: 空格键作为enter键