如何遍历列表以在 haskell 中的转换函数中获取值?
How to iterate through a list to grab values in an transition function in haskell?
我的任务是在 haskell 中定义一个(最小的)DFA。它的形式是 ([states], "language", transition function, start state, [accept states]),并且应该接受一个整数,并为它创建一个 DFA,用于可被整除的二进制数那个数字。例如,函数 4 将为可被 4 整除的二进制数创建 DFA。
我开始为 1 到 6 创建 DFA 以查看它正在采用的模式,我发现如果它处于某个状态并接收到 0,则二进制数加倍,所以这意味着状态加倍,如果它收到1,状态加倍并加1.
这是我为所有可被 4 整除的数字制作的示例。
create 4
= ([0,1,2,3], "01", ts, 0, [0])
where
ts = [ ((0, '0'), 0)
, ((0, '1'), 1)
, ((1, '0'), 2)
, ((1, '1'), 3)
, ((2, '0'), 0)
, ((2, '1'), 1)
, ((3, '0'), 2)
, ((3, '1'), 3)
]
这是我的广义 DFA 创建器的开始,它接受整数 n。
create n
= ([0..(n-1)], "01", ts, 0, [0])
where
ts = [ ((x, '0'), x `mod` n)
, ((x, '1'), (x*2 + 1) `mod` n)
]
#where x is an iterated number through the states array
我不确定这是最好的还是正确的方法..
我基本上希望它遍历状态数组,并为每个状态创建 2 个转换函数,一个用于接收“0”,一个用于接收“1”,然后应用上述逻辑。
我是 haskell 的新手,所以不太确定如何处理这个问题。任何建议将不胜感激!
提示:列表理解是一种循环。所以,你可以写
ts =
[ {- this part is your job -}
| x <- [0..n-1]
, char <- ['0', '1']
]
这将是一种嵌套循环,遍历 0
到 n-1
范围内的所有数字,以及所有二进制数字。在 {- this part is your job -}
处,您可以分别使用名称 x
和 char
作为两个循环的当前值。
我的任务是在 haskell 中定义一个(最小的)DFA。它的形式是 ([states], "language", transition function, start state, [accept states]),并且应该接受一个整数,并为它创建一个 DFA,用于可被整除的二进制数那个数字。例如,函数 4 将为可被 4 整除的二进制数创建 DFA。
我开始为 1 到 6 创建 DFA 以查看它正在采用的模式,我发现如果它处于某个状态并接收到 0,则二进制数加倍,所以这意味着状态加倍,如果它收到1,状态加倍并加1.
这是我为所有可被 4 整除的数字制作的示例。
create 4
= ([0,1,2,3], "01", ts, 0, [0])
where
ts = [ ((0, '0'), 0)
, ((0, '1'), 1)
, ((1, '0'), 2)
, ((1, '1'), 3)
, ((2, '0'), 0)
, ((2, '1'), 1)
, ((3, '0'), 2)
, ((3, '1'), 3)
]
这是我的广义 DFA 创建器的开始,它接受整数 n。
create n
= ([0..(n-1)], "01", ts, 0, [0])
where
ts = [ ((x, '0'), x `mod` n)
, ((x, '1'), (x*2 + 1) `mod` n)
]
#where x is an iterated number through the states array
我不确定这是最好的还是正确的方法..
我基本上希望它遍历状态数组,并为每个状态创建 2 个转换函数,一个用于接收“0”,一个用于接收“1”,然后应用上述逻辑。
我是 haskell 的新手,所以不太确定如何处理这个问题。任何建议将不胜感激!
提示:列表理解是一种循环。所以,你可以写
ts =
[ {- this part is your job -}
| x <- [0..n-1]
, char <- ['0', '1']
]
这将是一种嵌套循环,遍历 0
到 n-1
范围内的所有数字,以及所有二进制数字。在 {- this part is your job -}
处,您可以分别使用名称 x
和 char
作为两个循环的当前值。