我一直在为一个类似马里奥的游戏编写主SF,我是为了好玩而写的。以下是不解析的代码:
master_combine = proc pi -> do
-- rec cgg <- player_update >>> (initial_game --> bounds_updater) >>> iPre initial_game -< (pi, cgg)
rec gs <- player_update >>> (initial_game --> bounds_updater) -< (pi, dgs)
dgs <- iPre initial_game -< gs
returnA -< gs
这是解析并执行ok的代码:
master_combine = proc pi -> do
rec cgg <- player_update >>> (initial_game --> bounds_updater) >>> iPre initial_game -< (pi, cgg)
-- rec gs <- player_update >>> (initial_game --> bounds_updater) -< (pi, dgs)
-- dgs <- iPre initial_game -< gs
returnA -< cgg
请注意,我在同一个代码块中保留了两个版本,并添加了注释,以使差异更加明显。
原则上,我想创建一个具有小延迟的负反馈回路,这样我就可以绕过转换后的游戏,而不必切换功能。输出进入这样的"draw"SF:
mainSF = parseInput >>> master_combine >>> draw
在第一个版本中,我尝试使用中间名称gs(游戏状态)和dgs(延迟游戏状态)。错误在以dgs开头的线路上发出信号。
在第二个版本中,也就是对我有效的版本中,我必须把整个SF写在一行中。
我想使用该代码的第一个版本,因为我需要通过连接暗示负反馈循环的附加SF来扩展功能。
我一直在寻找箭头"do"表示法中rec的帮助,我总是能找到同样的例子来强调正确的代码缩进。但我用Sublime缩进,间距对我来说很好。有其他方法吗?括号,花括号?任何东西
我注意到您正在使用制表符。我猜你的标签设置为4个空格?Haskell的选项卡总是设置为8个空格。可以将Sublime中的选项卡设置更改为8个空格,也可以将Sublme设置为将选项卡扩展到空格,这样就可以了。
(显然,您必须将dgs
之前的选项卡更改为四个空格)。
另一种选择是在rec
后面放一条换行符(和缩进),在这种情况下,标签的长度无关紧要(因为你在使用标签方面是一致的):
master_combine = proc pi -> do
-- rec cgg <- player_update >>> (initial_game --> bounds_updater) >>> iPre initial_game -< (pi, cgg)
rec
gs <- player_update >>> (initial_game --> bounds_updater) -< (pi, dgs)
dgs <- iPre initial_game -< gs
returnA -< gs