我需要一个额外的LISP更少
大家好,我正在寻找一个“跳转标记”或“转到函数”,但没有一个。
我需要简化我的代码,因为我不想编写程序,例如(程序1)、(程序2),。。。每个(progn)下两次,因为有相同的。
亲切的问候
蓝鸟1973 有很多不同的方法来实现这一点
(while (/= 0 checkPINstate)
(requestPIN)
(checkPINstate))
(program1)
(program2)
这将强制执行正确的PIN,只留下esc作为备用出口(可能不是最优雅或最佳的解决方案)
-大卫 我的2c。。。
(cond ((and (/= 0 checkpinstate) (requestpin) (= checkpin inputpin)) (program 1) (program 2))
((program 1) (program 2))
) 嗨,大卫,
嗨,ronjonp,
谢谢你的尝试,但没有成功。
亲切的问候
蓝鸟1973
在上面的例子中,(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))
) 如果(requestpin)asigns一个全局变量“checkpinstate”,那么函数本身返回nil。
另一个2c。。
(if (member checkpinstate '(nil 0)) (requestpin))
(cond ( (and checkpinstate (/= 0 checkpinstate)) (program1) (program2) ))
当请求提示时,复制粘贴方法并不总是适用于示例。 也许:
(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需要读心术时,很难找到解决方案。 我现在找到了一个解决方案。
(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 不管好坏这将在没有混乱出口的情况下完成同样的事情。
;; 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")
) 嗨,ronjonp,
是的,你说得对。
这确实是更好的方法。
谢谢你的课!!!
亲切的问候
蓝鸟1973
页:
[1]
2