怎么把表1维位置和多维位置互转
本帖最后由 taoyi0727 于 2019-4-15 09:19 编辑(setq lst '(a (b c) (d (e f g) h) i (j k)))
(function-1-n lst 6)--->'(2 1 1)
(function-1-n lst 3)--->'(1 1)
(function-n-1 lst ' (2 1 0))--->5
(function-n-1 lst ' (2 2))--->8
想好好久想不出来 这个逻辑头痛
你没有说清楚到达想要什么,看得我们一头雾水。建议多用用论坛的搜索功能。 fl202 发表于 2019-4-15 16:03
你没有说清楚到达想要什么,看得我们一头雾水。建议多用用论坛的搜索功能。
(setq lst '(a (b c) (d (e f g) h) i (j k)))
(function-1-n lst 6)--->'(2 1 1)
就是把表看着成1维的表 '(a b c d e f g h I J k)里面的第6个素=f位置
返回 (nth 2 lst)==>'(d (e f g) h)
(nth 1 '(d (e f g) h))==>' (e f g)
(nth 1 '(e f g)==>f
得到'(2 1 1) _$ (defun f(lst)
(if (vl-catch-all-error-p (vl-catch-all-apply 'strcat lst))
(if (vl-catch-all-error-p (vl-catch-all-apply 'strcat (list (car lst))))
(setq va (strcat (f (car lst)) (f (cdr lst))))
(setq va (strcat (car lst) (f (cdr lst))))
)
(setq va (apply 'strcat lst))
)
)
(f '(("a" "b") "c" (("d" "e") "f")))
F
"abcdef"
(defun f1(lst str)
(setq flag t)
(if (member str lst)
(setq flag nil va (list (vl-position str lst)))
(setq va (last (vl-remove nil(mapcar '(lambda (x) (if (and flag(vl-catch-all-error-p (vl-catch-all-apply 'strcat (list str x))))
(setqva (cons (vl-position x lst) (f1 x str)))
(setqva nil)
))
lst
)
)
)
)
)
)
F1
_$ (f1 '(("a" "b") "c" (("d" "e") "f")) "d")
(2 0 0)
_$ (f1 '(("a" "b") "c" (("d" "e") "f")) "a")
(0 0)
_$ (f1 '(("a" "b") "c" (("d" "e") "f")) "b")
(0 1)
_$ (f1 '(("a" "b") "c" (("d" "e") "f")) "c")
(1)
_$ (f1 '(("a" "b") "c" (("d" "e") "f")) "d")
(2 0 0)
_$ (f1 '(("a" "b") "c" (("d" "e") "f")) "e")
(2 0 1)
_$ (f1 '(("a" "b") "c" (("d" "e") "f")) "f")
(2 1)
_$ (f1 '(("a" "b") "c" ("g "("d" "e") "f")) "f")
(2 2)
_$ (f1 '(("a" "b") "c" ("g "("d" ("e" "k") "f"))) "e")
(2 1 1 0)
_$ mahuan1279 发表于 2019-4-16 08:59
_$ (defun f(lst)
(if (vl-catch-all-error-p (vl-catch-all-apply 'strcat lst))
(if (vl-catc ...
帅哥你理解错了
这个和表里的内容没有关系主要是要表的结够计算位置
(setq lst '(1 (2 3) (4 5 6) 7 (8)))
_$ (f1 lst 4);(函数名 表 整数)
返回表里的第4个数的位置
(nth 2 lst)-->'(4 5 6)
(nth 0 '(4 5 6)-->4;这个4不是要4本身这个值,是要这个值所在表的多维位置
得到'(2 0)
反之
_$(f1 lst '(4 0))返回8这个8不是8这个值的本身,要这个值所在表的1维位置 (defun abc (lst n / lst1 aa ii bb nlst)
(defun AppendAll (lst)
(while (vl-some 'listp lst)
(setq lst (mapcar '(lambda (x) (if (listp x) x (list x)))lst)
lst (apply 'append lst)
)
)
lst
)
(setq aa (nth (1- n) (AppendAll lst))
nlst '()
ii 0
)
(while (setq bb (car lst))
(setq lst (cdr lst))
(cond ((and (/= (type bb) 'LIST) (equal bb aa))
(setq nlst (cons ii nlst)
ii -1
)
)
((and (= (type bb) 'LIST) (member aa (AppendAll bb)))
(setq nlst (cons ii nlst)
lstbb
ii -1
)
)
)
(setq ii (1+ ii))
)
(reverse nlst)
) 本帖最后由 taoyi0727 于 2019-4-16 15:42 编辑
xyp1964 发表于 2019-4-16 14:43
这个有点烧脑,脑子不太灵光
院长脑子就是好使一下搞定
谢谢
能否麻烦写下倒回来的
(函数 表 [ list ]多维表位置 [ list ])返回:1维位置 _$ (setq lst '(a (b c) (d (e f g) h) i (j k)))
(defun f1 (lst)
(if (= 0 (apply '+ (mapcar '(lambda (x) (if x 1 0)) (mapcar 'listp lst))))
(setq va (mapcar '(lambda (y) (list (vl-position y lst))) lst))
(setq va (mapcar '(lambda (y) (if (listp y)
(list (vl-position y lst) (f1 y))
(list (vl-position y lst))
)
)
lst)
)
)
)
(defun f2 (lst)
(if (= (length lst) 1)
(if (cdr (car lst))
(setq vlst (mapcar '(lambda (x) (cons (car (car lst)) x)) (f2 (car (cdr (car lst))))))
(setq vlst (list (car lst)))
)
(setq vlst (append (f2 (list (car lst))) (f2 (cdr lst))))
)
)
(defun function-1-n (i lst)
(nth (- i 1) (f2 (f1 lst)))
)
(defun function-n-1 (lst1 lst)
(+ 1 (vl-position lst1 (f2 (f1 lst))))
)
(A (B C) (D (E F G) H) I (J K))
F1
F2
FUNCTION-1-N
FUNCTION-N-1
_$ (function-1-n 1 lst)
(0)
_$ (function-1-n 2 lst)
(1 0)
_$ (function-1-n 3 lst)
(1 1)
_$ (function-1-n 4 lst)
(2 0)
_$ (function-1-n 5 lst)
(2 1 0)
_$ (function-1-n 6 lst)
(2 1 1)
_$ (function-1-n 7 lst)
(2 1 2)
_$ (function-1-n 8 lst)
(2 2)
_$ (function-1-n 9 lst)
(3)
_$(function-1-n 10 lst)
(4 0)
_$ (function-1-n 11 lst)
(4 1)
_$ (function-n-1 '(0) lst)
1
_$ (function-n-1 '(1 0) lst)
2 mahuan1279 发表于 2019-4-16 21:04
_$ (setq lst '(a (b c) (d (e f g) h) i (j k)))
(defun f1 (lst)
(if (= 0 (apply '+ (mapcar '(lamb ...
谢谢帮助完美
页:
[1]