有选择地迭代Scheme中的列表

时间:2015-02-28 06:32:29

标签: scheme

我在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是列表。

1 个答案:

答案 0 :(得分:2)

使用您正在采取的方法,只需绘制一个检查项目是否符合条件的函数:

(map (lambda (x)
       (if (criteria? x)
           (create-evaluation-link x)))
      parse)

然而,正如其他人在评论中指出的那样,使用地图来执行命令性工作可能是一个其他方法在Scheme中可能更自然的地方。例如,您可能首先筛选出不符合条件的值,然后将create-evaluation-link映射到该值以获取评估链接列表。

(map create-evaluation-link (filter criteria? parse))