joh*_*mos 4 haskell list infinite
创建
:: [(Integer, Integer)]包含表单对的无限列表对(m,n),其中m和n中的每一个都是其成员[0 ..].另一个要求是,如果(m,n)是列表的合法成员,那么(elem (m,n) pairs)应该True在有限的时间内返回.违反此要求的对的实现被认为是非解决方案.
****新编辑感谢您的评论,让我们看看我是否可以取得一些进展****
pairs :: [(Integer, Integer)]
pairs = [(m,n) | t <- [0..], m <- [0..], n <-[0..], m+n == t]
Run Code Online (Sandbox Code Playgroud)
像这样的东西?我只是不知道它会在有限的时间内返回True.
我觉得这个问题措辞的方式elem不一定是我答案的一部分.如果你打电话(elem (m,n) pairs)它应该返回true.听起来不对?
忽略该helper方法,您的列表推导将列出所有对,但元素的顺序是一个问题.您将有无限多的对像(0, m)被这之后无穷多的对像(1, m).当然,elem将永远遍历所有的(0, m)对从未达到(1, m)或(2, m)等.
我不确定为什么你有这个helper方法 - 有了它,你只是建立一个对的列表,[(0,0), (1,1), (2,2), ...]因为你已经过滤了m = n.是那部分要求吗?
像@hammar建议的那样,开始0 = m + n并列出对(m,n).然后列出对(m,n)在哪里1 = m + n.然后你的清单看起来像[(0,0), (0,1), (1,0), (0,2), (1,1), (2,0), ...].