Bluebird1973 发表于 2022-7-5 15:54:35

我需要一个额外的LISP更少

大家好,
 
我正在寻找一个“跳转标记”或“转到函数”,但没有一个。
我需要简化我的代码,因为我不想编写程序,例如(程序1)、(程序2),。。。每个(progn)下两次,因为有相同的。
 
亲切的问候
蓝鸟1973

David Bethel 发表于 2022-7-5 16:05:37

有很多不同的方法来实现这一点
 


(while (/= 0 checkPINstate)
      (requestPIN)
      (checkPINstate))
(program1)
(program2)


 
这将强制执行正确的PIN,只留下esc作为备用出口(可能不是最优雅或最佳的解决方案)
 
-大卫

ronjonp 发表于 2022-7-5 16:10:29

我的2c。。。
(cond ((and (/= 0 checkpinstate) (requestpin) (= checkpin inputpin)) (program 1) (program 2))
   ((program 1) (program 2))
)

Bluebird1973 发表于 2022-7-5 16:17:29

嗨,大卫,
嗨,ronjonp,
 
谢谢你的尝试,但没有成功。
 
亲切的问候
蓝鸟1973

ronjonp 发表于 2022-7-5 16:24:17

 
在上面的例子中,(program1)和(program2)将始终运行,所以不确定您将使用它去哪里?
 
也许:
(cond ;; Pin already validated .. run programs
   ((= 0 checkpinstate) (program 1) (program 2))
   ;; Pin not validated, get the pin, if pin checks out then run programs
   ((and (requestpin) (= checkpin inputpin)) (program 1) (program 2))
)

Grrr 发表于 2022-7-5 16:25:27

如果(requestpin)asigns一个全局变量“checkpinstate”,那么函数本身返回nil。
 
另一个2c。。

(if (member checkpinstate '(nil 0)) (requestpin))
(cond ( (and checkpinstate (/= 0 checkpinstate)) (program1) (program2) ))

 
 
当请求提示时,复制粘贴方法并不总是适用于示例。

ronjonp 发表于 2022-7-5 16:33:10

也许:
(cond
;; Pin already validated .. run programs
((= "0" (getenv "checkpinstate")) (program 1) (program 2))
;; Pin not validated, get the pin, if pin checks out set the 'checkpinstate' variable then run programs
((and (requestpin) (= checkpin inputpin)) (setenv "checkpinstate" "0") (program 1) (program 2))
)
 
当其中的1/2需要读心术时,很难找到解决方案。

Bluebird1973 发表于 2022-7-5 16:42:03

我现在找到了一个解决方案。
 
 

(progn
(cond
   (
      (/= 0 checkPINstate)
         (progn
            (requestPIN)
            (cond
               (
               (/= checkPIN inputPIN)
                  (progn
                     (princ "\nError: bad argument pw")
                     (exit)
                     )
               )
            )
         )
   )
)

(if (= Prog checkProg)
   (progn
      (cond
         ((program 1))
         ((program 2))
         ((program 3))
         ...

 
 
亲切的问候
蓝鸟1973

ronjonp 发表于 2022-7-5 16:47:16

不管好坏这将在没有混乱出口的情况下完成同样的事情。
;; Assumes that your (requestpin) actually returns something
(if (or (= 0 checkpinstate) (and (requestpin) (/= checkpin inputpin) (= prog checkprog)))
(progn (program 1) (program 2) (program 3))
(princ "\nError: bad argument pw")
)

Bluebird1973 发表于 2022-7-5 16:53:10

嗨,ronjonp,
 
是的,你说得对。
这确实是更好的方法。
 
谢谢你的课!!!
 
亲切的问候
蓝鸟1973
页: [1] 2
查看完整版本: 我需要一个额外的LISP更少