有以下 list :
(1 2 3 (4 5 6) "Properties" (("id" . 3) ("name" . "hello lisp")))
要求分别用:
- quote
- cons
- acutBuildList
- acutNewRb
方式构造.
- (quote (1 2 3 (4 5 6) "Properties" (("id" . 3) ("name" . "hello lisp"))))
- (cons 1 (cons 2 (cons 3 (cons (cons 4 (cons 5 (cons 6 nil))) (cons "Properties" (cons (cons (cons "id" 3) (cons (cons "name" "hello lisp") nil)) nil))))))
- acutBuildList(
RTSHORT, 1,
RTSHORT, 2,
RTSHORT, 3,
RTLB, // begin sublist
RTSHORT, 4,
RTSHORT, 5,
RTSHORT, 6,
RTLE, //end sublist
RTSTR, _T("Properties"),
RTLB,
RTLB, // begin dotted paris.
RTSTR, _T("id"),
RTDOTE,
RTSHORT, 3,
RTLE, //end dotted pair.
RTLB,
RTSTR, _T("name"),
RTDOTE,
RTSTR, _T("hello lisp"),
RTLE,
RTLE,
0); - resbuf* pHead = NULL;
resbuf* pTail = NULL;
resbuf* pTmp = NULL;
pHead = acutNewRb(RTLB);
pTail = pHead;// the first cell 1 2 3
pTmp = acutNewRb(RTSHORT);
pTmp->resval.rint = 1;
pTail = addTail(pTail, pTmp);pTmp = acutNewRb(RTSHORT);
pTmp->resval.rint = 2;
pTail = addTail(pTail, pTmp);pTmp = acutNewRb(RTSHORT);
pTmp->resval.rint = 3;
pTail = addTail(pTail, pTmp);// sub list (4 5 6)
pTmp = acutNewRb(RTLB);
pTail = addTail(pTail, pTmp);
pTmp = acutNewRb(RTSHORT);
pTmp->resval.rint = 4;
pTail = addTail(pTail, pTmp);
pTmp = acutNewRb(RTSHORT);
pTmp->resval.rint = 5;
pTail = addTail(pTail, pTmp);
pTmp = acutNewRb(RTSHORT);
pTmp->resval.rint = 6;
pTail = addTail(pTail, pTmp);
pTmp = acutNewRb(RTLE);
pTail = addTail(pTail, pTmp);// "Properties"
pTmp = acutNewRb(RTSTR);
pTmp->resval.rstring = _tcsdup(_T("Properties"));
pTail = addTail(pTail, pTmp);// dotted pairs: ("id" . 3) ("name" . "hello lisp")
pTmp = acutNewRb(RTLB);
pTail = addTail(pTail, pTmp);
pTmp = acutNewRb(RTLB);
pTail = addTail(pTail, pTmp);pTmp = acutNewRb(RTSTR);
pTmp->resval.rstring = _tcsdup(_T("id"));
pTail = addTail(pTail, pTmp);
pTmp = acutNewRb(RTDOTE);
pTail = addTail(pTail, pTmp);
pTmp = acutNewRb(RTSHORT);
pTmp->resval.rint = 3;
pTail = addTail(pTail, pTmp);
pTmp = acutNewRb(RTLE);
pTail = addTail(pTail, pTmp);
pTmp = acutNewRb(RTLB);
pTail = addTail(pTail, pTmp);
pTmp = acutNewRb(RTSTR);
pTmp->resval.rstring = _tcsdup(_T("name"));
pTail = addTail(pTail, pTmp);
pTmp = acutNewRb(RTDOTE);
pTail = addTail(pTail, pTmp);
pTmp = acutNewRb(RTSTR);
pTmp->resval.rstring = _tcsdup(_T("hello lisp"));
pTail = addTail(pTail, pTmp);
pTmp = acutNewRb(RTLE);
pTail = addTail(pTail, pTmp);
pTmp = acutNewRb(RTLE);
pTail = addTail(pTail, pTmp);pTmp = acutNewRb(RTLE);
pTail = addTail(pTail, pTmp);
res_list = pHead;
---
内存问题
使用 acutBuildList, acutNewRb 构造的数据, 内存是有 ads 程序分配的,
当使用 acedRetList 返回给 lisp 环境时,
lisp 运行时对传入的 resbuf 列表作了一次深度复制.
所以, acedRetList 之后, ads 程序应该释放掉所分配的列表.