处理函数比上一次练习; 他们不必处理多个行尾标记或可选参数。这里是折叠:
(定义(fold-port读取器文件夹base.port)
(let((p(if(null?端口)(当前输入端口)(汽车端口)))
(let循环((项目(读取器p))(结果库))
(if(eof-object?item)
结果
(循环(读卡器p)(文件夹结果项))))
映射端口
可以写成(反向(fold-port reader cons'())。端口))
,但我们会让它独立存在:
(定义(map-port读取器mapper.port)
(let((p(if(null?端口)(当前输入端口)(汽车端口)))
(let循环((项(读取器p))(结果'()))
(if(eof-object?item)
(结果相反)
(循环(读取器p)(cons(映射项)结果))))
For-each执行与fold和map相同的迭代,但不累加输出,因为所有过程调用都只针对其副作用进行评估:
(定义(用于每个端口的读取器进程端口)
(let((p(if(null?端口)(当前输入端口)(汽车端口)))
(let循环((项目(读取器p)))
(如果(不是(eof-object?item))
(开始(进程项)(循环(读取器p))))
过滤器不同于其他过滤器,采用读取器并返回新的读取器:
(定义(过滤器端口读取器pred?)
(lambda参数
(let循环((x(应用读取器参数)))
(cond((eof对象?x)x)
((预?x)x)
(其他(循环(应用读取器参数))))
上述代码收集于http://programmingpraxis.codepad.org/c7utWH0v,在下一个练习中,我们将有一个真实的例子。您可以在中阅读有关这种类型的输入/输出数据处理的更多信息这篇论文,包括文档、示例用法和完整代码。
页码:1 2