level 6
state monad的标签是s -> (s, a) 其中s表示状态,a表示状态转换得到的中间结果的类型。
use的含义是,把状态(这里是一个数)取出来作为结果,并且更新状态(自增1)。
假设当前状态是s=3
将s带入use = \x -> (x + 1, x)
可得转移后的状态(下一个状态)为s = x + 1, 结果为a = x也就是当前状态
2022年07月20日 11点07分
2
感谢大佬解答
2022年07月20日 14点07分
level 6
回3L
这代码不可能是你底下运行结果。
底下应该return (x, y)
之所以生成所有排列:
list monad的return是 return x = [x]
而list monad的bind操作,也就是>=,也被称为flatmap,平坦map的结果。
flatmap f xs = concat (map f xs)
举例子
假设f x = [x+10, x * 10]则
flatmap f [a, b, c] =
concat [[ a + 10, a * 10], 略过,略过]
= [ a + 10, a * 10, b + 10, b * 10, c + 10, c * 10]
你的代码是两层flatmap,自己算算答案对不对
2022年07月21日 05点07分
4
啊对 这个return是我后改的 感谢大佬
2022年07月21日 06点07分