标签: common-lisp

Lisp中C结构的惯用等价物是什么?

在C类语言中,从一开始就在每本入门书中都强调结构/记录和对象.然后,他们的完整系统围绕管理这些结构,它们的相互关系和继承而设计.

在Lisp文档中,你通常可以找到1-2页关于Lisp"也"如何有一个defstruct,一个简单的例子,通常就是这样.而且,根本没有提到结构的嵌套.

对于来自C背景的人来说,首先看来,分层组织不同的数据类型不是Lisp中的首选方法,但除了CLOS之外,CLOS是一个完整的对象系统,如果你只是想要结构,那就太复杂了,除了疯狂一切在列表中,没有明显的方法来转移您的C结构知识.

什么是层次组织数据的惯用Lisp方法,最类似于C结构?

-

我认为我的问题的总结答案是:对于初学者学习目的,defstruct和/或plists,虽然"遗留特征",可以使用,因为它们最接近C结构,但它们已被更大的取代更多灵活的defclass/CLOS,这是大多数Lisp程序今天使用的.

这是我关于SO的第一个问题,所以感谢大家的回答.

c lisp struct common-lisp

20
推荐指数
3
解决办法
3309
查看次数

在Common Lisp中使用字符串对象作为哈希键

我正在尝试创建一个"字典"类型 - 即以字符串作为键的哈希表.这在Lisp中是可行的还是明智的?

我注意到这可以按预期工作:

> (setq table (make-hash-table))
#<HASH-TABLE :TEST EQL size 0/60 #x91AFA46>
> (setf (gethash 1 table) "one")
"one"
> (gethash 1 table)
"one"
Run Code Online (Sandbox Code Playgroud)

但是,以下内容不是:

> (setq table (make-hash-table))
#<HASH-TABLE :TEST EQL size 0/60 #x91AFA0E>
> table
#<HASH-TABLE :TEST EQL size 0/60 #x91AFA0E>
> (setf (gethash "one" table) 1)
1
> (gethash "one" table)
NIL
NIL
Run Code Online (Sandbox Code Playgroud)

lisp hash dictionary common-lisp

19
推荐指数
1
解决办法
4118
查看次数

LISP的未来是什么?我应该学习吗?

我知道这不是一个非常技术性的问题,但它适用于所有技术人员,这就是我在这里提出的问题.这是我的问题:

有人能帮我理解学习LISP的现在和未来吗?我的一个在大学论文里使用LISP的一个项目(这是一个大项目 - 可能是两个学期的),我不能决定我是否应该把大量的精力投入到学习LISP如果在LISP没有未来,或我是否应该尽可能多地学习作业,并做一些其他不需要任何LISP的项目.我知道一点基本的LISP.请帮我.

lisp common-lisp

19
推荐指数
4
解决办法
3989
查看次数

是否有命令停止Common Lisp中的解释器?

我正在寻找一个表达式,它将导致解释器在被评估时退出.

我发现了许多特定于实现的但没有在HyperSpec中,我想知道是否有任何我没有看到规范中定义的.我发现它(quit)被CLISP和SLIME (exit)都认可,并且只有CLISP才能识别,但是我找不到任何参考其中任何一个的文档.

lisp common-lisp

19
推荐指数
4
解决办法
8134
查看次数

为什么这个函数每次都返回一个不同的值?

有人可以解释以下行为吗?具体来说,为什么函数每次都返回一个不同的列表?为什么每次调用函数时都没有some-list初始化'(0 0 0)

(defun foo ()
  (let ((some-list '(0 0 0)))
    (incf (car some-list))
    some-list))
Run Code Online (Sandbox Code Playgroud)

输出:

> (foo)
(1 0 0)
> (foo)
(2 0 0)
> (foo)
(3 0 0)
> (foo)
(4 0 0)
Run Code Online (Sandbox Code Playgroud)

谢谢!

编辑:

另外,假设我希望'(1 0 0)每次输出函数,推荐的实现此函数的方法是什么?

lisp scope common-lisp literals

19
推荐指数
3
解决办法
825
查看次数

特殊形式和宏之间有什么实际区别?

特殊形式和宏之间是否存在实际差异?他们有什么不同?

lisp macros scheme clojure common-lisp

19
推荐指数
2
解决办法
2490
查看次数

Lisp表单和Lisp表达式是一样的吗?

一些文献说"以下形式的第一个子形式......"或"评估形式......",而其他一些文献说"评估表达......",大多数文献似乎都使用这两个术语.这两个术语是否可以互换?意义上有区别吗?

lisp scheme clojure common-lisp

19
推荐指数
3
解决办法
946
查看次数

是否有可能在方案中实现Common Lisp的宏系统?

希望这不是一个多余的问题.

作为计划的新手,我意识到syntax-case宏比syntax-rules替代方案更强大,代价是不必要的复杂性.

但是,是否有可能在方案中实现Common Lisp的宏系统,它比syntax-rules使用syntax-case?更强大?

compiler-construction macros scheme common-lisp

19
推荐指数
3
解决办法
4418
查看次数

write,print,pprint,princ和prin1有什么区别?

我正在进入一些Lisp,我遇到了各种不同的功能,对我来说似乎在做同样的事情......即打印到控制台......那么所有这些不同功能之间的区别到底是什么?

lisp printing common-lisp output

19
推荐指数
1
解决办法
8722
查看次数

CLISP,ECL和SBCL之间的主要区别是什么?

我想做一些模拟,ACT-R我需要一个Common Lisp实现.我有三种Common Lisp可用的实现:(1) CLISP [1],(2) ECL [1](3) SBCL [1].正如您可能从链接中收集的那样,我已经在维基百科上阅读了所有这三个链接.但我想要一些有经验的用户的意见.更具体地说,我想知道:

(i) 这三种实现之间的主要区别是什么(例如:它们最擅长的是什么?它们中的任何一种仅用于特定目的,因此可能不适用于特定任务吗?)?

(ii)基于我将使用的事实ACT-R还是基于一般原因,是否有明显的选择?


由于这可以解释为一个主观问题我检查了我在这里可以问什么主题以及我应该避免询问哪些类型的问题?如果我读得正确,它不应该被视为禁果.

clisp sbcl common-lisp ecl

19
推荐指数
3
解决办法
1万
查看次数