gpt4 book ai didi

lisp - 搜索包含 lists 或 conses 的列表

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

假设我们有一个这样的列表(包含更多元素,但方法应该相同):

(define l '((cons 'name 'john)
(cons 'sur 'asurname)
(cons 'name 'george)
(cons 'sur 'georgesurname)))

而且我们总是可以向现有列表中添加更多元素。这是最有效的方法让我们说写一个函数,它接受用户的名字并返回姓氏:

类似的东西:

(define display-surname
(lamdba (name)
(...)))

这种情况下的一般做法是什么?任何人都可以指出如何操作的示例/链接吗?

最佳答案

最好在单个列表中表示每条记录 (name,surname),然后将您的数据作为成对列表的列表来处理:

(define lst '(((name . a) (sur . b)) ((name . c) (sur . d))))

使用上面的表示,找到一个名字(给定一个姓氏)就像这样简单(假设记录中的每个字段总是在相同的位置找到):

(define display-surname
(lambda (lst name)
(cond ((null? lst) #f)
((eq? (cdaar lst) name) (cdadar lst))
(else (display-surname (cdr lst) name)))))

你可以进一步简化事情(再次假设记录中的每个字段总是在相同的位置)通过如下表示上述数据,并在 display-surname 中进行相应的更改:

(define lst '((a . b) (c . d)))

(define display-surname
(lambda (lst name)
(cond ((null? lst) #f)
((eq? (caar lst) name) (cdar lst))
(else (display-surname (cdr lst) name)))))

无论哪种方式,这都有效:

(display-surname lst 'a)
> 'b

(display-surname lst 'x)
> #f

关于lisp - 搜索包含 lists 或 conses 的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10559234/

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