gpt4 book ai didi

list - 具有隐式顺序 lisp 的平面无序列表和元组

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

Lisp 中是否有一个函数的工作方式与 assoc 与关联列表的工作方式相同,但适用于扁平的有序列表和一组具有隐式排序的元组?例如,我有一个扁平的无序列表和一个查找函数:

(defparameter *data2* '((alf age 55 year 2 course lisp)
(sue age 22 year 3 course java)
(ralf age 16 year 1 course lisp)
(alf age 8 year 2 course lisp)))

(defun lookup (name course data)
(cdr (assoc name (cdr (assoc course data)))))

当被调用时,lookup 函数就像:

(lookup 'alf 'course *data*) ==> get lisp

现在,使用“具有隐式顺序的元组”(即,值始终以相同顺序排列的值列表):

(defparameter *data3* '((alf 55 lisp 2)
(sue 22 java 3)
(ralf 16 lisp 1)
(alf 8 lisp 2)))

对于关联列表,是否有任何函数的工作方式与 assoc 相同,但对于平面无序列表和具有隐式顺序的元组?

最佳答案

不确定我是否完全理解你;是这样的吗?

(defun lookup (name attr data)
(mapcar (lambda (x) (cadr (member attr x)))
(remove-if-not (lambda (x) (eq name (car x))) data)))

然后

? (lookup 'alf 'course *data2*)
(LISP LISP)
? (lookup 'alf 'age *data2*)
(55 8)
?(lookup 'ralf 'year *data2*)
(1)

对于你的另一个例子:

(defun lookup (name attr data)
(mapcar (lambda (x) (nth attr x))
(remove-if-not (lambda (x) (eq name (car x))) data)))

然后

(lookup 'alf 2 *data3*)
(lookup 'alf 1 *data3*)
(lookup 'ralf 3 *data3*)

关于list - 具有隐式顺序 lisp 的平面无序列表和元组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20101191/

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