saim 发表于 2022-7-5 16:35:57

哎呀。它就在那里。一定是我不能马上翻译的短语之一(英语不是我的母语,你可能已经猜到了),而且被认为不重要。很抱歉我有时也这么做。
尽管如此,我还是不明白为什么我必须在每个条件下使用两个括号。也许答案是“因为它是一个条件,而不是一个参数,条件必须在括号中,即使它是每种情况下唯一的东西”。但如果是这样,最后一个条件。。。默认条件。。。那么为什么它没有括号呢?

Lee Mac 发表于 2022-7-5 16:39:51

 
别担心;不需要道歉。
 
 
不一定,这取决于条件是原子还是表达式,因为测试参数可能是任何AutoLISP数据类型。
 
例如,考虑以下人为示例:
(defun c:test ( / a b c )
   (cond
       (   (progn
               (initget "Red Blue Green")
               (setq a (getkword "\nWhat's your favourite colour? <more>: "))
         )
       )
       (   (progn
               (initget "Yellow White Black")
               (setq b (getkword "\nWhat's your favourite colour? <more>: "))
         )
       )
       (   (progn
               (initget "Orange Purple Brown")
               (setq c (getkword "\nWhat's your favourite colour? <I don't know!>: "))
         )
       )
   )
   (princ
       (strcat "\nYour favourite colour is "
         (cond
               (    a    )
               (    b    )
               (    c    )
               ("unknown")
         )
       )
   )
   (princ)
)
 
测试或/和函数也是如此-使用用户输入的getpoint:LMB返回值或RMB返回nil。

saim 发表于 2022-7-5 16:47:24

返回您的代码
 
(defun C:test ( / a )
(cond
   ( (setq a (getpoint "\nFirst try <enter to skip>: ")) (alert "First point specified.") )
   ( (setq a (getpoint "\nSecond try<enter to skip>: ")) (alert "Second point specified.") )
   ( (setq a (getpoint "\nThird try<enter to skip>: ")) (alert "Third point specified.") )
   ( (alert "\nYou didn't tried enough - all I wanted was a point!") )
); cond
(princ)
); defun C:test

Grrr 发表于 2022-7-5 16:48:59

BIGAL 发表于 2022-7-5 16:56:27

back to your code
 

((= s "Y") 1) ;if s equals "Y", then it'll return 1((= s "y") 1) ;if s equals "y", then it'll return 11 line only needed((= (strcase s) "Y") 1) ;if s equals "Y", then it'll return 1
页: 1 [2]
查看完整版本: 提示输入默认值