gpt4 book ai didi

lisp - 一个 Lisp "association list"和 Java 的 Map 这样的键值映射有什么关系?

转载 作者:太空宇宙 更新时间:2023-11-03 18:33:24 24 4
gpt4 key购买 nike

我正在阅读Lisp 国度(顺便说一下,这是我读过的最好的技术书籍之一)并且我遇到了“关联列表”:

(defparameter *edges* 
'((living-room (garden west door)
(attic upstairs ladder))
(garden (living-room east door))
(attic (living-room downstairs ladder))))

Lisp中的关联列表与Java的Map(键值绑定(bind))是同一个概念吗?

对于 living-room 键,怎么可能有多个值?为什么要用列表括起值?

'(living-room
((garden west door)
(attic upstairs ladder)))

最佳答案

  1. 是的,关联列表是表达键值关联的一种方式。 Common Lisp 为此提供的其他结构是属性列表和哈希表。

  2. 该值实际上已经包含在列表中。 alist 基本上是一个对列表,其中每对的 car 是键,cdr 是与该键关联的值。如果您使用 ASSOC 查找 key LIVING-ROOM 并将 CDR 应用于结果:

CL-USER> (cdr (assoc 'living-room *edges*))((GARDEN WEST DOOR) (ATTIC UPSTAIRS LADDER))

这背后的神奇之处在于,一对汽车是 living-room 并且 cdr 是两个元素的列表 (garden west door)(attic upstairs ladder)也可以看作是三元素列表(living-room (garden west door) (attic upstairs ladder)),由于lists的方式是成对构造的。

通常当将列表表示为带引号的对象时,您会看到用点对明确描述的元素,而不是用列表符号双关语,如下所示:

(defparameter *edges*   '((living-room . ((garden west door)                    (attic upstairs ladder)))    (garden . ((living-room east door)))     (attic . ((living-room downstairs ladder))) ))

关于lisp - 一个 Lisp "association list"和 Java 的 Map 这样的键值映射有什么关系?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4154646/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com