找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 496|回复: 13

怎么把表1维位置和多 维位置互转

[复制链接]
发表于 2019-4-15 12:11:06 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
本帖最后由 taoyi0727 于 2019-4-15 14:08 编辑

怎么把表1维位置和多 维位置互转
(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
谢谢大家的帮助
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 19个

财富等级: 恭喜发财

发表于 2019-4-15 12:19:59 | 显示全部楼层
没看懂** 是什么

点评

(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 (  详情 回复 发表于 2019-4-15 13:24
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-15 13:24:46 | 显示全部楼层
Lisphk 发表于 2019-4-15 12:19
没看懂** 是什么

(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)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1864个

财富等级: 堆金积玉

发表于 2019-4-15 18:19:11 | 显示全部楼层
表里面a、b、c、d……应该加双引号吧(作为字符串)?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1864个

财富等级: 堆金积玉

发表于 2019-4-16 00:03:53 | 显示全部楼层
_$ (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"
_$
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6056个

财富等级: 富甲天下

发表于 2019-4-16 00:07:06 | 显示全部楼层
什么叫1维,什么叫**?
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1864个

财富等级: 堆金积玉

发表于 2019-4-16 02:26:58 | 显示全部楼层
(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))))
                                                
                                     (setq  va (cons (vl-position x lst) (f1 x str)))
                                                                 (setq  va 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)
_$

点评

帅哥 你理解错了 这个和表里的内容没有关系 主要是要表的结够计算位置 (setq lst '(1 (2 3) (4 5 6) 7 (8))) _$ (f1 lst 4);(函数名 表 整数) 返回表里的第4个数的位置 (nth 2 lst)-->'(4 5 6) (nth 0 '(4 5  详情 回复 发表于 2019-4-16 09:39
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-16 09:39:13 | 显示全部楼层
aimisiyou 发表于 2019-4-16 02:26
(defun f1(lst str)
(setq flag t)
(if (member str lst)

帅哥  你理解错了
这个和表里的内容没有关系  主要是要表的结够计算位置
(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维位置

点评

从你字面上很好理解,但程序运行处理的数据是有类型的,像整型、浮点型、字符串……,你潜意识里处理的数据是泛型,但lisp里处理不了这种模糊类型数据。  详情 回复 发表于 2019-4-16 09:49
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1864个

财富等级: 堆金积玉

发表于 2019-4-16 09:49:47 | 显示全部楼层
本帖最后由 aimisiyou 于 2019-4-16 10:03 编辑
taoyi0727 发表于 2019-4-16 09:39
帅哥  你理解错了
这个和表里的内容没有关系  主要是要表的结够计算位置
(setq lst '(1 (2 3) (4 5 6)  ...

从你字面上很好理解,但程序运行处理的数据是有类型的,像整型、浮点型、字符串……,你潜意识里处理的数据是泛型(和表里的内容无关),但lisp里处理不了这种模糊类型数据。如果表里全部是数值,也可以处理,只是函数稍微变动下。前提是你的lst里的元素要明确是什么固定类型(不能一时是数值,一时是字符串),后面才能根据固定的数据类型确定处理函数。

点评

谢谢你的帮助 我找黄师(自贡黄明儒)写好了 没有他的同意我也不好放出来 [*](setq L '(1 2 ("3" "A") b (a) (4 "1"))) [*](function-1-n 1 l);(0) [*](function-1-n 4 l);(2 1) [*](function-1-n 8 l);(5 1) [  详情 回复 发表于 2019-4-16 11:08
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1864个

财富等级: 堆金积玉

发表于 2019-4-16 10:11:50 | 显示全部楼层
本帖最后由 aimisiyou 于 2019-4-16 10:19 编辑

具体问题具体分析吧。你所说的表里第几个“数”的位置,这个“数”太不明确了(数据类型是什么)。按你的意思,(setq lst '(1 (“2” 3 a) (4 5 6) 7 (8)))也是可以得出结果的,但lisp里不同类型数据处理起来就麻烦了,可能实现不了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2019-4-16 11:08:55 | 显示全部楼层
aimisiyou 发表于 2019-4-16 09:49
从你字面上很好理解,但程序运行处理的数据是有类型的,像整型、浮点型、字符串……,你潜意识里处理的数 ...

谢谢你的帮助  我找黄师(自贡黄明儒)写好了
没有他的同意我也不好放出来
  • (setq L '(1 2 ("3" "A") b (a) (4 "1")))
  • (function-1-n 1 l);(0)
  • (function-1-n 4 l);(2 1)
  • (function-1-n 8 l);(5 1)
  • (function-1-n '(2 0) l);3
  • (function-1-n '(5 0) l);7
  • (function-1-n '(3) l);5

1.gif

点评

_$ (setq lst '(1 2 ("3" "A") b (a) (4 "1"))) (1 2 ("3" "A") B (A) (4 "1")) _$ (function-1-n 1 lst) (0) _$ (function-1-n 2 lst) (1) _$ (function-1-n 3 lst) (2 0) _$ (function-1-n 4 lst) (2 1)  详情 回复 发表于 2019-4-16 21:12
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1864个

财富等级: 堆金积玉

发表于 2019-4-16 21:03:19 | 显示全部楼层
_$ (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
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1864个

财富等级: 堆金积玉

发表于 2019-4-16 21:12:23 | 显示全部楼层
taoyi0727 发表于 2019-4-16 11:08
谢谢你的帮助  我找黄师(自贡黄明儒)写好了
没有他的同意我也不好放出来
  • (setq L '(1 2 ("3" "A") b ...

  • _$ (setq lst '(1 2 ("3" "A") b (a) (4 "1")))
    (1 2 ("3" "A") B (A) (4 "1"))
    _$ (function-1-n 1 lst)
    (0)
    _$ (function-1-n 2 lst)
    (1)
    _$ (function-1-n 3 lst)
    (2 0)
    _$ (function-1-n 4 lst)
    (2 1)
    _$ (function-1-n 5 lst)
    (3)
    _$ (function-1-n 6 lst)
    (4 0)
    _$ (function-1-n 7 lst)
    (5 0)
    _$ (function-1-n 8 lst)
    (5 1)
    _$

    点评

    谢谢帮助 完美  详情 回复 发表于 2019-4-17 12:20
    论坛插件加载方法
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
    如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
    回复 支持 反对

    使用道具 举报

     楼主| 发表于 2019-4-17 12:20:53 | 显示全部楼层
    aimisiyou 发表于 2019-4-16 21:12
    _$ (setq lst '(1 2 ("3" "A") b (a) (4 "1")))
    (1 2 ("3" "A") B (A) (4 "1"))
    _$ (function-1-n 1 ls ...

    谢谢帮助  完美
    论坛插件加载方法
    发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
    如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
    如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

    GMT+8, 2024-4-30 18:29 , Processed in 0.457846 second(s), 58 queries , Gzip On.

    Powered by Discuz! X3.5

    © 2001-2024 Discuz! Team.

    快速回复 返回顶部 返回列表