要在Haskell中创建N阶循环组,您可以为大整数定义类型data BigInt = B0 BigInt | B1 BigInt | B
,以及通常的add
/ mod
操作。然后,您可以定义op a b = mod (add a b) n
以获得订单n
的附加组。问题是add
和mod
的实现相对复杂,涉及带进位的棘手的状态传递递归等。是否有更直接,更自然的方法来使用数据类型创建循环组?例如:
data T = A T T | B T T | C
是否可以为该数据类型定义一个相对简单的add :: T -> T -> T
,以便我们定义这样的组?我一直在尝试一些树轮换方案,但似乎要生成一个很长一段时间的操作并不容易。