如何在列表理解形式中表达{2n + 3m + 1 | n,m∈N}?(N是包括0的自然数集)

gra*_*ray 3 haskell list-comprehension

如何在列表理解形式中表达{2n + 3m + 1 | n,m∈N}?N是自然数的集合,包括0.

var*_*tec 8

不是{2n + 3m + 1 | n,m∈ℕ} =ℕ - {0,2}?

  • 是啊,你说得对.但除了这两个,任何x>2∈N都可以表示为2n + 3m + 1 (3认同)

Nor*_*sey 6

以下Haskell函数将为您提供来自两个列表的所有对,即使其中一个或两个都是无限的.每对出现一次:

allPairs :: [a] -> [b] -> [(a, b)]
allPairs _ [] = []
allPairs [] _ = []
allPairs (a:as) (b:bs) = 
   (a, b) : ([(a, b) | b <- bs] `merge` 
             [(a, b) | a <- as] `merge` 
             allPairs as bs)
  where merge (x:xs) l = x : merge l xs
        merge []     l = l
Run Code Online (Sandbox Code Playgroud)

然后你可以把你的清单写成

[2 * n + 3 * m + 1 | (n,m) <- allPairs [0..] [0..] ]
Run Code Online (Sandbox Code Playgroud)

为了了解它是如何工作的,绘制一个无限的四分之一平面,并查看结果

take 100 $ allPairs [0..] [0..]
Run Code Online (Sandbox Code Playgroud)