autolisp 列表 resbuf

有以下 list :


(1 2 3 (4 5 6) "Properties" (("id" . 3) ("name" . "hello lisp")))


要求分别用:

  1. quote
  2. cons
  3. acutBuildList
  4. acutNewRb

方式构造.


  1. (quote (1 2 3 (4 5 6) "Properties" (("id" . 3) ("name" . "hello lisp"))))
  2. (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))))))
  3. 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);
  4. 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 程序应该释放掉所分配的列表.

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值