[LISP]计算单行文字+、-、*、/的程序
本人前几天找到一个计算单行文字的用LISP语言编的可实现+、-、*、/的程序,加载后从命令行输入JS就行了,共享一下,代码如下:(defun *error* (ERROR)
(princ "error:")
(princ "CAO ZUO ERROE")
(PRINC "\n please try a time")
)
(defun getss(/ SS N I NAME0 NAME X0 X1)
(INITGET (+ 1 2 4))
(setq ss (ssget '((0 . "TEXT"))))
(if (= ss nil) (setq ss (ssadd)))
(setq ssa (ssadd))
(while (/= (setq n (sslength ss)) 0)
(progn
(setq i 1)
(setq name0 (ssname ss 0))
(setq x0 (caddr (assoc 10 (entget name0))))
(while (
(DEFUN C:JS(/NN II ENT NAME TXT PP P0 PP0 NAME1
P ST ZH ZW ANG I N W TEMP)
(SETvar "BLIPMODE" 0)
(SETvar "CMDECHO" 0)
(PROMPT "\n FIRST-SSGET:")
(INITGET (+ 1 2 4))
(getss)
(SETQ SS1 ssa)
(PROMPT "\n SECOND-SSGET:")
(getss)
(SETQ SS2 ssa)
(INITGET (+ 1 2 4))
(IF (= (SSLENGTH SS2) 0)
(SETQ JSF (GETSTRING "\n JI SUAN FU:?"))
(SETQ JSF (GETSTRING "\n JI SUAN FU:?")))
(WHILE (AND (/= JSF "+") (/= JSF "-") (/= JSF "*") (/= JSF "/") (/= JSF ""))
(GETSTRING "\n JI SUAN FU:?"))
(IF (AND (= (SSLENGTH SS2) 0) (= JSF "")) (SETQ JSF "+"))
(IF (AND (/= (SSLENGTH SS2) 0) (= JSF "")) (SETQ JSF "*"))
(SETQ P0 (CDR (ASSOC 10 (ENTGET (SSNAME SS1 0)))))
(INITGET (+ 1 2 4))
(SETQ PP0 (GETPOINT "\n TEXT-POINT:?"))
(SETvar "BLIPMODE" 0)
(IF (= (SSLENGTH SS2) 0)
(PROGN
(SETQ XI (GETREAL "\n XU CHU DE XI SHU [/] :?"))
(IF (= XI NIL) (SETQ XI 1)))
(PROGN
(SETQ XI (GETREAL "\n XU CHU DE XI SHU [/]:? "))
(IF (= XI NIL) (SETQ XI 100))
))
(SETQ WS (GETINT "\n XIAO SHU WEI:? "))
(IF (= WS NIL) (SETQ WS 2))
(SETQ NN1 (SSLENGTH SS1))
(SETQ II 0)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(IF (= (SSLENGTH SS2) 0)(PROGN
(WHILE (= NN1 NN2) (SETQ NN NN2) (SETQ NN NN1))
(WHILE ("))
(WHILE (AND (/= JSF "+") (/= JSF "-") (/= JSF "*") (/= JSF "/") (/= JSF ""))
(GETSTRING "JI SUAN FU:?"))
(IF (= JSF "") (SETQ JSF "*"))
(SETQ XI (GETREAL "\nXI SHU:?"))
(SETQ P0 (CDR (ASSOC 10 (ENTGET (SSNAME SS 0)))))
(SETvar "BLIPMODE" 0)
(INITGET (+ 1 2 4))
(SETQ PP0 (GETPOINT "\nTEXT-POINT:?"))
(SETvar "BLIPMODE" 0)
(SETQ WS (GETINT "\nXIAO SHU WEI:? "))
(IF (= WS NIL) (SETQ WS 1))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(SETQ NN (SSLENGTH SS))
(SETQ II 0)
(WHILE ("))
(IF (= XI NIL) (SETQ XI 0.888))
(SETvar "BLIPMODE" 0)
(SETQ WS (GETINT "\n XIAO SHU WEI:? "))
(IF (= WS NIL) (SETQ WS 2))
(SETQ NN1 (SSLENGTH SS1))
(SETQ II 0)
(SETQ TXT 0)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(IF (AND (/= SS2 NIL) (/= SS1 NIL)) (PROGN
(SETQ NN2 (SSLENGTH SS2))
(IF (>= NN1 NN2) (SETQ NN NN2) (SETQ NN NN1))
(WHILE (
(SETvar "BLIPMODE" 0)
(SETvar "CMDECHO" 0)
(PRINC)
)
研究一下,感觉还是比较靠谱
页:
[1]