我在Scheme中有一个对象列表。每个对象依次是一个列表本身。我使用map
函数迭代列表的所有元素并将函数应用于它们。但是,我只想在列表元素满足某些条件时才应用该函数。在C++
中可能是这样的:
for(i=0; i<=n; i++)
{
if(criteria(list[n]))
//do something
}
我如何在Scheme中执行此操作?现在,我正在使用这样的地图功能:
(map create-evaluation-link parse)
create-evaluation-link
是一个函数,parse
是列表。
答案 0 :(得分:2)
使用您正在采取的方法,只需绘制一个检查项目是否符合条件的函数:
(map (lambda (x)
(if (criteria? x)
(create-evaluation-link x)))
parse)
然而,正如其他人在评论中指出的那样,使用地图来执行命令性工作可能是一个其他方法在Scheme中可能更自然的地方。例如,您可能首先筛选出不符合条件的值,然后将create-evaluation-link映射到该值以获取评估链接列表。
(map create-evaluation-link (filter criteria? parse))