别担心,迈克;我们都开始了(又一次?)在某处
迈克,你说得太好了;我很乐意帮忙。
考虑这个小例子:
(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相同的基本方法:
(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))
唯一不允许使用2xtxt的方法是,用户手动使用LISP更改它,因此我不介意检查成员。如果这是必要的,并且我不需要来自成员的结果列表元素,为了方便起见,我会使用vl位置。
此外,请注意:
是的,很好,黑匣子。在你能够完成回答之前,我修复了最后一项(在括号外取2倍),但这是一个我没有完全注意到的好问题。我将2xtxt视为一个全局变量,这意味着任何程序都可以改变它,包括OP可能编写的程序,尽管人们希望这种情况永远不会发生。这是一个很长的名字,很不寻常,除非是OP。至于vl位置,恐怕我对VLISP了解得太少,所以不可能想出这个名字。谢谢你的提示。 ((lambda (/)
(initget 0 "6 8 10 12")
(strcat "2x"
(setq *choice* (cond ((getkword (strcat "\nSpecify framing size: 2x <"
(cond (*choice*)
((setq *choice* "6"))
)
">: "
)
)
)
(*choice*)
)
)
)
)
) 感谢Blackbox和Neophoible,
代码很好,很紧凑。
我的完整例程有3个问题,都使用以下结构。。设置默认值。我可以按enter键或空格键来接受这些默认值,但当我进入最后一个问题时,除非我在命令行中真正键入最终选项,否则它就会爆炸。
仅供参考。。。我现在收到一个“错误:错误的参数类型:stringp nil”。这是否意味着存在未重置的变量?
谢谢
迈克
页:
1
[2]