问:跨属性列表映射函数的惯用方式是什么?
各种映射函数(mapcar
和族)在诸如列表的序列上映射函数。在处理属性列表时,即试图在列表中包含的每个属性之间进行映射(从第一个元素开始的所有其他元素)时,如何使用这些功能?在我看来,映射功能将需要成对访问元素而不是单个元素的列表。
作为一个玩具示例,如何获取属性列表并收集所有属性值?如果它是一个关联列表,它将非常简单:
(mapcar #'cadr '((:prop1 a) (:prop2 b) (:prop3 c))) ;=> (a b c)
我敢肯定这可以通过循环来完成,但是这似乎有点费力,我想知道是否还有一种更惯用的方式来做到这一点。
@德鲁:我对一般情况更感兴趣;这个例子是我能想到的最简单的例子。我想知道如何在属性/值对上进行映射。如果答案是“循环”,那就这样吧,但我想知道是否有更优雅的解决方案。
—
丹
示例中的内容不是属性列表。属性列表具有偶数个元素,奇数个元素是属性名称,偶数个元素是属性值。您所拥有的可能称为树(列表列表)。
—
wvxvw 2015年
mapcar
示例的作用)还是要映射成对的属性符号和属性值。我想,后者更通用(更通用)。