明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 2299|回复: 6

[求助]Lisp怎样实现类似链表和二叉树这样的数据结构

[复制链接]
发表于 2005-2-3 13:21:00 | 显示全部楼层 |阅读模式
Lisp怎样实现类似链表和二叉树这样的数据结构

请高手多多指教。
 楼主| 发表于 2005-2-5 17:00:00 | 显示全部楼层
有没有人精通普通的Lisp(不是autocad下的Lisp)


或者推荐一些书和网站。
 楼主| 发表于 2005-2-6 13:43:00 | 显示全部楼层
我想知道能不能在


表 '(a b c e) 中 插入一个 d 变成 '(a        b c d e)


求一种在表的某个位置插入元素的通用做法
发表于 2005-2-6 16:17:00 | 显示全部楼层
下面的函数仅对数字和字串有效
  1. (DEFUN LSTINSERT (LST ATM I J TMP TML A)
  2.   (SETQ L (LENGTH LST) I 0 J -1 TMP LST TML (LIST))
  3.   (WHILE (< I L)
  4.    (SETQ A (CAR TMP) TMP (CDR TMP) I (1+ I))
  5.    (IF (< ATM A) (SETQ J I I L) (SETQ TML (CONS A TML)))
  6.   )
  7.   (IF (> J 0)
  8.    (SETQ TMP (APPEND (REVERSE TML) (LIST ATM) TMP))
  9.    (SETQ TML (CONS ATM TML) TMP (REVERSE TML))
  10.   )
  11.   TMP
  12. )
复制代码
 楼主| 发表于 2005-2-6 21:45:00 | 显示全部楼层
LST ATM I J TMP TML A


分别是什么含义啊?
发表于 2005-2-16 01:37:00 | 显示全部楼层
好象少了一个“/”号!“/”号后面的是内部变量名。 (DEFUN LSTINSERT ( / LST ATM I J TMP TML A)
(SETQ L (LENGTH LST) I 0 J -1 TMP LST TML (LIST))
(WHILE (< I L)
(SETQ A (CAR TMP) TMP (CDR TMP) I (1+ I))
(IF (< ATM A) (SETQ J I I L) (SETQ TML (CONS A TML)))
)
(IF (> J 0)
(SETQ TMP (APPEND (REVERSE TML) (LIST ATM) TMP))
(SETQ TML (CONS ATM TML) TMP (REVERSE TML))
)
TMP
)
发表于 2005-2-16 04:25:00 | 显示全部楼层
;;测试: (tt 'd 3 '(a b c e)) ->(A B C D E)
  1. (defun tt (a i lst / n)
  2.    (setq n -1)
  3.    (apply 'append (mapcar '(lambda(x)(if (= i (setq n (1+ n))) (list a x)(list x)) ) lst))
  4. )
您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-17 18:59 , Processed in 0.172083 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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