大佬教程收集整理的这篇文章主要介绍了遍历 Racket 中的结构列表列表?,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
给出以下形式的列表:
(define lst (List
(List
(make-route-section 32 'ordinary-road 23 0.45)
(make-route-section 54 'ordinary-road 92 0.83)
(make-route-section 14 'street 8 0.82)
(make-route-section 44 'ferry 34 0.64)
(make-route-section 96 'ferry 249 0.41)
)(
List
(make-route-section 92 'ordinary-road 12 0.44)
(make-route-section 98 'highway 45.243 0.3)
(make-route-section 44 'ordinary-road 34.4 0.64)
(make-route-section 39 'street 6 0.8)
)(
List
(make-route-section 62 'highway 82 0.35)
(make-route-section 58 'street 4 0.46)
(make-route-section 50 'highway 81 0.24)
(make-route-section 75 'highway 67.3 0.39)
)
)
路线部分如下:
(define-struct route-section (ID kind length eco-indeX))
(define-struct traffic-jam (section-ID delay))
例如,我将如何使用 (List 32 62) 之类的列表过滤掉具有给定 ID(结构的第一个字段)的某些结构,并返回外部列表的第二个元素。特别让我困惑的是,当我输入 (second lst) 时,它返回了整个列表的第一个列表的第二个元素。
如何将路线段的长度相加?感觉好蠢,即使使用高阶函数也无法遍历嵌套列表。
这是求总路线长度的方法。
路由是一个段的列表,每个段是一个段的列表,段是结构。
总结一个数字列表的好方法是(foldl + 0 <list>)
。但是我们没有数字列表,我们有一个段列表。所以我们想从每个段中得到一个数字。我们可以再次使用 foldl
。但是段的每个元素都不是数字:它是一个部分。因此,获取事物列表并获取其他事物列表的一个好方法是使用 (map <function-to-turn-something-into-something-else> <list-of-somethings>)
。
route-section-length
将接受一个 section 对象并返回它的长度,这就是我们想要映射的函数。所以我们可以开始,在一个段上,把它变成一个段的长度列表:
(map route-section-length <segment>)
现在我们有了每个段的数字列表,我们可以使用 foldl
:
(foldl + 0 (map route-section-length <segment>))
这会将一个段变成一个数字。好吧,我们有一个段列表,所以我们想把它们转换成一个数字列表,我们可以通过映射一个函数体来完成,该函数的主体是上面的表达式:
(map (λ (segment)
(foldl + 0 (map route-section-length segment)))
routE)
好的,这给了我们一个数字列表,我们现在需要将它们相加,再次使用 foldl
:
(foldl + 0
(map (λ (segment)
(foldl + 0 (map route-section-lenght segment)))
routE))
这就是我们想要的,包含在定义中。
另外:正确缩进代码。
以上是大佬教程为你收集整理的遍历 Racket 中的结构列表列表?全部内容,希望文章能够帮你解决遍历 Racket 中的结构列表列表?所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。