我希望我的术语在这里是正确的——如果不是,请随时编辑任何内容。
我在写一篇关于组合博弈论的论文时使用 Haskell 作为辅助语言 - 即,我的所有函数都只是处理数字并帮助我为我正在研究的游戏找到解决方案。
我为一个具体的、完整的“棋盘大小”(想想棋盘、5x5 等)编写了所有函数。我想扩展到任何大小的学习板,所以通过包含一个整数参数来修改所有相关函数。例如,
type Size = Int
squares :: Size -> [Square]
squares size = [ (x,y) | x <- [1..size],
y <- [1..size]]
然而,这已经开始变得混乱。通常我认为与大小无关的函数在访问需要大小的函数时必须提供大小。
这很快就会导致这样的行:
reaching size = (losing size) \\\ (setA size)
takeUDmir _ [] = []
takeUDmir size (x:xs) = [x] ++ takeUDmir size (xs \\\ mirUD size x)
rotate size s = concatMap (mirUD size) (mirLR size s)
(请注意,函数的内容实际上并不重要,我只是想展示它变得多么失控。)
我对使用 Haskell 以及一般的函数式编程非常有信心,但我不知道如何才能删除所有这些size
引用,而只是依靠其他东西来设置每个需要使用它的函数的大小.
我想我可能正在寻找一个单子,但我不知道。