有选择地迭代 Scheme 中的列表
Selectively iterating over a list in 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
是列表。
使用您所采用的方法,只需映射一个检查项目是否符合条件的函数:
(map (lambda (x)
(if (criteria? x)
(create-evaluation-link x)))
parse)
但是,正如其他人在评论中指出的那样,使用 map 执行命令式工作可能是 Scheme 中其他一些方法可能更自然的地方。例如,您可能首先过滤掉不符合条件的值,然后在其上映射 create-evaluation-link 以获得 evaluation-links.[=12= 的列表]
(map create-evaluation-link (filter criteria? parse))
我在 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
是列表。
使用您所采用的方法,只需映射一个检查项目是否符合条件的函数:
(map (lambda (x)
(if (criteria? x)
(create-evaluation-link x)))
parse)
但是,正如其他人在评论中指出的那样,使用 map 执行命令式工作可能是 Scheme 中其他一些方法可能更自然的地方。例如,您可能首先过滤掉不符合条件的值,然后在其上映射 create-evaluation-link 以获得 evaluation-links.[=12= 的列表]
(map create-evaluation-link (filter criteria? parse))