newLISP中的字典类型

在之前一篇在newlisp中使用table-driven模式曾经用过这个类型做table-driver模式。

这里将专门描述Tree如何使用。

创建字典

首先Tree是一个namesapce(也就是context),如果想创建一个字典保存key/value结构,需要如下使用:

(new Tree 'MyTable) 
(MyTable "/home/a.cc" "123:45") 
(MyTable "/home/b.cc" "123:46") 
(MyTable "/home/c.cc" "123:47") 
(MyTable "/home/d.cc" "123:48") 
(MyTable "/home/e.cc" "123:49") 

这样,其实是创建了一个名为MyTable的context,里面用symbol的形式保存了很多key/value的组合。

查询字典

读取的时候也很简单:

(MyTable "/home/a.cc")
"123:45"


添加数据和遍历

(while (read-line)
  (set 'line-value (parse (current-line) "\t"))
  (set 'key (line-value 0))
  (set 'value (int (line-value 1)))
  (set 'v (my-table key))
  (if v
      (my-table key (+ v value))
    (my-table key value)
      )
)

(dolist (item (my-table)) (println (item 0) "\t" (item 1)))

(exit)

这段代码演示了如何读取一行数据,分解出key和value,然后用key查找,如果有则累加value,如果没有则添加数据

最后,遍历所有的数据。

字典长度

(length (MyTable))


保存字典

(save "d2.lsp" 'MyTable)

这样MyTable里的所有数据都被保存到d2.lsp文件中,现在打开看一下:

(context 'MyTable)

(set '_/home/a.cc "123:45")

(set '_/home/b.cc "123:46")

(set '_/home/c.cc "123:47")

(set '_/home/d.cc "123:48")

(set '_/home/e.cc "123:49")


(context MAIN)

原来居然是很多的MyTable 中的变量,所以这其实是一个模拟的字典。目前我还不清楚其算法复杂度是多少?


读取字典文件

就是通用做法

(load "d2.lsp")
MAIN

现在可以使用了。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值