首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用有限的过程实现列表(lisp)

使用有限的过程实现列表(lisp)
EN

Stack Overflow用户
提问于 2013-04-19 10:37:30
回答 2查看 104关注 0票数 2

我目前正在做一个clisp作业,做一个基本的地址簿。但是,对此赋值的警告是,我只能使用cons、car、cdr、cond、if、eq、assoc和setf来完成赋值...

这是我想要做的:

代码语言:javascript
复制
(defun create-entry (name email phone-number address)
  (list (cons 'name name)
        (cons 'email email)
        (cons 'phone-number phone-number)
        (cons 'address address)))

很明显,我不能在这里使用list,到目前为止,我唯一的解决方案是ben to cons name和email,cons phone-number to thus,cons address to isn to my to ben。

有一种方法可以仅使用cons、car、cdr、cond、if、eq、assoc和setf来实现列表过程。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-04-19 10:48:37

list只是一堆cons单元格,一个接一个地链接,nil是最后一个cdr。因此,您可以像这样实现create-entry函数:

代码语言:javascript
复制
(defun create-entry (name email phone-number address)
  (cons (cons 'name name)
    (cons (cons 'email email)
      (cons (cons 'phone-number phone-number)
        (cons (cons 'address address)
          nil)))))

或者,您可以实现自己版本的list函数,如下所示:

代码语言:javascript
复制
(defun your-own-list (&rest l) l)

(defun create-entry (name email phone-number address)
  (your-own-list 
    (cons 'name name)
    (cons 'email email)
    (cons 'phone-number phone-number)
    (cons 'address address)))

但这感觉与任务的精神背道而驰。

票数 3
EN

Stack Overflow用户

发布于 2013-04-20 01:02:12

我已经检查过了,但只想让你知道,最终你会这样做:

代码语言:javascript
复制
(defun create-entry (name email phone-number address)
  `((name  . ,name)
    (email . ,email)
    (phone-number . ,phone-number)
    (address . ,address)))

它使用quasiquote作为方便的语法来创建结构化列表。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16096320

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档