ljfzx 发表于 2019-1-18 10:26:02

如何合并两个LISP命令?

现有两个LISP命令,暂定为C和CC,如何输入TT,默认运行C,按一次空格运行CC?

479274135 发表于 2019-1-23 19:52:12

ljfzx 发表于 2019-1-22 16:39
两个命令是不同的功能,一个是开一个是关,不是连续执行的关系

(defun c:tt ()
(if (= 4_tt 0)
    (progn
      (c:程序1)
      (setq 4_tt 1)
    )
    (progn
      (c:程序2)
      (setq 4_tt 0)
    )
)
(princ)
)循环两个命令的话可以这样


669423907 发表于 2019-1-21 20:02:36

(defun hss()
(setq bhzg nil)

(if (and (not txt)(not bhx))
(princ(strcat"\n 1=10+,2=20+,3=3+,4=4+,4+=50,-=2,*=3,/=4,5~9对应相同数\n 左键+1右键1,0输入值,+数字编号,A文字引线,Q画↙空格改字高 "(rtos zigao)"   ") ) )
(if (and (not txt)(= bhx 1))
(princ(strcat"\n 1=10+,2=20+,3=3+,4=4+,4+=50,-=2,*=3,/=4,5~9对应相同数\n 左键点选对象(空选=1),右键前缀编号,0输入值,空格设置字高 "(rtos zigao)"   ") ) )
(if (and (not txt)(= bhx 2))
(princ(strcat "\n 0输入值,1=10+,2=20+,3=3+,4=4+,4+=50,-=2,*=3,/=4,5~9对应相同数,空格=4\n 左键 "ts"右键 2-"ts) ) )
(if (/= txt nil)
(princ "\n 0输入深度,1=10+,2=20+,3=3+,4=4+,4+=50,-=2,*=3,/=4,5~9对应相同数") )

(setq aj (grread)) (cond;(setq u (grread))回车后按任意键
;((= (car aj) 3) (if (/= txt nil)(QuXiao)()) );左键+1
((= (car aj) 25) (if(/= txt nil)(QuXiao)) (if(not bhx)(setq hs 1)) (if(= bhx 1)(qianzhuibh))
               (if(= bhx 2)(progn(if(not ts)(setq ts"")(setq ts(strcat"-"ts)))(hs+)) ) ) ;右键1
((= (cadr aj) 48) (if (/= txt nil)(setq hs (getint"\n 请输入深度:")) (setq hs (getint"\n 请输入起始数:")) ) )         ;0输入起始数
((= (cadr aj) 32) (if (/= txt nil)(QuXiao)) (if (/= bhx 2)(progn (setq bhzg 1)(xgbzzg))) (if (= bhx 2)(setq hs 4)) )   ;空格设置字高
((= (cadr aj) 43) (setq bhx 1) )    ;+数字编号
((= (cadr aj) 97) (setq bhx "A") );a文字引线
((= (cadr aj) 65) (setq bhx "A") );A文字引线
((= (cadr aj) 81) (setq jt "Q") (c:ps) );q画箭头
((= (cadr aj) 113) (setq jt "Q") (c:ps) );Q画箭头

;;;;;;;;;;;;;;;;;;;


(defun hs+() ;右键+1
(if (not hs)
(progn (setq hs 1)         (princ (strcat"\n左键 2"      ts"         右键 3"ts) ))
(progn (if(= hs 2)(setq hs 3))(princ(strcat"\n左键 "(rtos hs)ts"         右键 "(rtos(1+ hs))ts)) ))
(if (getpoint)
(setq hs (if(= hs 1)2 hs))
(progn (setq hs (1+ hs)) (hs+))
) )

自己改一下吧

479274135 发表于 2019-1-19 20:20:58

(defun c:(/ kJ)
(initget 7 "1 2 3");3后面两个空格
(setq kJ (getkword "\n输入选项[<1>,<2>,<3>]:<1>:"))
(cond
    ((= "2" kJ)(c:程序2快捷键))
    ((= "3" kJ)(c:程序3快捷键))
    (t (c:程序1快捷键)))
(princ))

start4444 发表于 2019-1-18 10:29:20

把码贴上来

kwok 发表于 2019-1-18 11:14:59

(defun c:tt ( )
(c:c)
(pause)
(c:cc)
)

ljfzx 发表于 2019-1-19 11:49:45

kwok 发表于 2019-1-18 11:14
(defun c:tt ( )
(c:c)
(pause)


亲测不行,只能使用第一个命令,无法使用第二个命令

kwok 发表于 2019-1-19 15:19:28

本帖最后由 kwok 于 2019-1-19 15:26 编辑

ljfzx 发表于 2019-1-19 11:49
亲测不行,只能使用第一个命令,无法使用第二个命令
(defun c:tt ()
(c:c)
(princ "\回车运行下一个:")
(while (/= (car (grread)) 2))
(c:cc)
)

ljfzx 发表于 2019-1-21 15:06:26

kwok 发表于 2019-1-19 15:19
(defun c:tt ()
(c:c)
(princ "\回车运行下一个:")


使用了之后没有运行命令,提示点无效

ljfzx 发表于 2019-1-21 15:10:15

479274135 发表于 2019-1-19 20:20
(defun c/ kJ)
(initget 7 "1 2 3");3后面两个空格
(setq kJ (getkword "\n输入选项[,,]::"))


你的程序我用起来是可以,但是需要再输入123或者空格,比较麻烦,可不可以默认执行命令1,按一次空格执行2,再按一次执行3?

baitang36 发表于 2019-1-21 16:29:18

ljfzx 发表于 2019-1-21 15:10
你的程序我用起来是可以,但是需要再输入123或者空格,比较麻烦,可不可以默认执行命令1,按一次空格执行2 ...

为啥要按空格呢。直接弄成一个文件,变成一个命令不好?
页: [1] 2
查看完整版本: 如何合并两个LISP命令?