cenyong 发表于 2005-11-22 10:10:00

[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)
         )

aaxxgg 发表于 2012-12-13 15:49:00

研究一下,感觉还是比较靠谱
页: [1]
查看完整版本: [LISP]计算单行文字+、-、*、/的程序