【发布时间】:2013-03-10 17:46:15
【问题描述】:
所以这是我的问题(概括为抽象情况)。一般是口译员。
我有一个程序需要解析输入列表,并根据其元素顺序调用一些需要修改变量的函数。函数单独定义并由 (cond 选择。我需要更新的这 3 个变量包含有关当前情况的信息(确切地说 - 机器人位置、迷宫和机器人方向)。之前函数的结果用于下一个函数(即使用更新的变量)。
(define func-a ... )
(define func-b ... )
(define (main-func <maze> <orientation> <coordinates> <list with commands>)
;; here I parse the list and choose which function to call
;; output must contain (list <new-maze> <new-orientation> <new-coordinates>))
)
我可以使用哪些方案工具来更新这些变量?我考虑了几个选项:
- 使用(定义然后调用集合!(这是不好的风格,因为它不是纯函数式编程);
- 从头到尾调用函数(这行不通:我还必须检查移动是否有效);
- 根本不要让这些变量保持不变,尝试将它们作为参数传递给每个函数;
还有其他合适的方法吗?
【问题讨论】:
-
我认为,您需要更具体一些。方法总是取决于问题,而你提供的信息量是不够的。
-
我会选择你的第三个选项,将三个变量(代表状态)从函数传递到另一个函数(最好在尾部调用中)。您还可以在更新它们时将这些三元组收集到一个列表中,从而创建一个明确的评估历史(如果您的机器人试图解决迷宫可能会很有用) - 增加列表,例如like here.
-
如果你在处理状态的过程中坚持这条黑暗而曲折的道路,试图保持纯粹的功能,你最终会进入单子王国。 cs.indiana.edu/cgi-pub/c311/lib/exe/….