visual lisp输入四个数,从小到大排序

visual lisp输入四个数,从小到大排序,第1张

根据题意,试编程序如下:

(defun carnth (i l) 表取头,保留表L前面I-1个元素,函链老数返回新表

(if (= i (length l))

l

(progn

(setq l (reverse l)

i (- (length l) i 1)

l (cdrnth i l)

)

(reverse l)

)

)

)

(defun cdrnth (i l) 表取尾,去老迅除表L后面I个元素,函数返回新表

(repeat (1+ i) (setq l (cdr l)))

)

(defun delnth (i l) 删除表L中第I个元素,函数棚含升返回新表

(append (carnth i l) (cdrnth i l))

)

(defun min2max (l / lp a i k) 表中的数从小到大排序

(while (>(length l) 0)

(setq lp (cons (setq a (apply 'max l)) lp))

(setq i 0

k t

)

(while k

(if (= a (nth i l))

(setq k nil

l (delnth i l)

)

(setq i (1+ i))

)

)

)

lp

)

程序运行及结果:

命令:(min2max '( 1 2 5 4 3))

函数返回值:(1 2 3 4 5)

试用以坦州下程序

(defun c:ccc()

(setq cm (getvar "cmdecho")

os (getvar "osmode")

)

(setvar "cmdecho" 0)

(command "_undo" "be")

(if (setq pt0 (getpoint "败信租\左下角:"))

(if (setq pt1 (getcorner pt0 "\n右上角:"))

(progn

(setvar "osmode" 0)

(command "_rectang" pt0 pt1)

(while (setq pdbz (getint "\n要改变长宽吗<输入任意整数则改变,回车则结束>:"))

(setq dxy (mapcar '- pt1 pt0)

ent (entlast)

)

(if (= (setq cd (getreal (strcat "\n当前长度为:" (rtos (car dxy) 2 3) ", 请输入改动值:"))) nil)

(setq cd (car dxy))

)

(if (= (setq kd (getreal (strcat "\n当前宽度为:" (rtos (cadr dxy) 2 3) ", 请输入改察兆动值:"))) nil)

(setq kd (cadr dxy))

)

(if (not (equal dxy (list cd kd)))

(command "_erase" ent ""

"_rectang" pt0 (mapcar '+ pt0 (list cd kd))

)

)

)

)

)

)

(command "_undo" "e")

(setvar "osmode" os)

(setvar "cmdecho" cm)

(princ)

)


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/8196561.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-14
下一篇 2023-04-14

发表评论

登录后才能评论

评论列表(0条)

保存