主要观点:作者近期开始户外体重训练并计划下月开始跑步,今晚编写了一个每周训练计划的 Haskell 程序。
关键信息:
- 每周需在一个轴上进行一次短跑和一次长跑,另一个轴上进行两次拉日、两次推日和两次腿日训练。
- 使用
logict包来处理逻辑问题,通过choose、exactly等函数组合逻辑语句。 weeklySchedule函数通过do记号结合各种条件和逻辑组合来生成满足约束的训练计划。
重要细节:workout包含推日、拉日、腿日和无训练选项,running包含长跑、短跑和无跑步选项,weekdays为一周的工作日。- 在
weeklySchedule函数中,通过forM遍历每个工作日,为每个工作日选择workout和running中的元素,并满足一系列条件,如跑步日不能是腿日、短间隔跑在户外拉/推训练后等。 - 还使用了
exactly函数确保某个元素出现的次数,onDay函数确定元素在特定工作日的情况,spacedOut函数确保训练之间至少间隔特定天数,daysBetween函数确保两个元素之间至少间隔特定天数等。 - 程序入口点
main打印出满足约束的训练计划,共有三种不同的训练计划。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用。你还可以使用@来通知其他用户。