nila_joy 发表于 2022-7-6 08:42:09

在autolisp中操作列表

嗨,刚刚加入cadtutor。它已经帮了我很多。谢谢大家。
 
我是Lisp的初学者,我想操作列表。
 
((1.y)(2.b)(3.d)(4.f)),这是一个列表。
 
我希望这个是(1.b),(2.y)这样。
2.我希望它是(1 2 3 4)(y b d f)
 
我知道你们都是专家,这篇文章会让你们都很沮丧,但从最近两天开始,我一直在尝试这样做,不知道我应该使用哪个功能。

pBe 发表于 2022-7-6 08:58:18

那是(1.y)还是(1.y)?
 
随便。。如果是的话

(defun splt (lst / num alp)
(foreach itm (reverse lst)
   (setq num (cons (car itm) num)
alp (cons (cdr itm) alp)
   )
)
(list num alp)
)


(defun splt (lst / a b num alp)
(setq lst (reverse lst))
(while (setq a (car lst))
   (setq b   (cdr lst)
num (cons (car a) num)
alp (cons (cdr a) alp)
   )
   (setq lst b)
)
(list num alp)
)

David Bethel 发表于 2022-7-6 09:10:23

对于#2,您可以使用(mapcar)
 


(setq lst '((1 . y)(2 . b)(3 . d)(4 . f)))

(setq l1 (mapcar 'car lst))
(setq l2 (mapcar 'cdr lst))


 
 
有很多方法可以做到这一点。祝你好运-大卫

Tharwat 发表于 2022-7-6 09:17:56

我的版本,它并不比大卫的代码远。。
 

(setq lst '((1 . y) (2 . b) (3 . d) (4 . f)))

(mapcar (function (lambda (x)
                   (setq x1 (cons (car x) x1))
                   (setq x2 (cons (cdr x) x2))
               )
       )
       lst
)
(reverse x1)
(reverse x2)

Lee Mac 发表于 2022-7-6 09:29:19

另一个:
 
(setq lst '((1 . y) (2 . b) (3 . d) (4 . f)))

(apply 'mapcar (cons 'list (mapcar '(lambda ( x ) (list (car x) (cdr x))) lst)))

Tharwat 发表于 2022-7-6 09:35:57

另一个
 

(setq lst '((1 . y) (2 . b) (3 . d) (4 . f)))

(defun Picks (lst / i j)
(foreach x (reverse lst)
   (setq i (cons (car x) i))
   (setq j (cons (cdr x) j))
)
(princ i)
(princ j)
(princ)
)

(Picks lst)

nila_joy 发表于 2022-7-6 09:46:52

Thnx Tharwat,David和PBE。。。我有两个函数,mapcar和lambda。。。我得到了我的答案。
 
再次感谢各位。来自印度的感谢。
页: [1]
查看完整版本: 在autolisp中操作列表