这里有一些关于逻辑和默认值的更多信息,有很多方法可以做这些事情,所以这篇文章并不完整。
首先,您需要记住,如果用户按enter键,getkword将返回nil,因此为了控制默认值,我们利用了这一事实。
有很多方法可以做到这一点,但这里有一些方法,我很快就组合起来了。
最简单的例子是,当您想要一个永远不会改变的“设置”默认值(如“是/否”,总是默认为“是”):
- (initget "Yes No")
- (if (not (setq ans (getkword "\nYes or No <Yes> : ")))
- (setq ans "Yes"))
- (initget "Yes No")
- (setq ans (cond ((getkword "\nYes or No <Yes> : "))
- ("Yes")))
- (initget "Yes No")
- (or (setq ans (getkword "\nYes or No <Yes> : "))
- (setq ans "Yes"))
但我们可以更进一步,也许有一个默认值将更改为最后输入的值。
例如,检索非零正数时:
在这里,我们设置了一个初始默认值“*def*”(它将保持全局-即不本地化),并且,如果用户在提示符上输入一个新数字,我们会将该数字设置为默认值。变量*def*将被我们的程序用于任何目的。
因此,如果用户在提示符下点击enter键,*def*的值不会改变,我们的程序将使用默认值。
实现相同结果的其他方法:
对于那些没有看到以这种方式使用的函数“和”&“或”的人,为了帮助澄清它,考虑一下这些函数的评估方式。
使用or时,将对语句进行求值,直到语句的求值结果为true。此时评估停止。
使用and,将对语句进行求值,直到语句的求值结果为nil(false)。此时评估停止。
此外,请记住,true是任何非零的东西。
我希望这能帮助你理解,
李 |