2015-01-26 1 views
1

검색했지만 도움이되는 내용을 찾지 못해 새로운 질문을 게시합니다. 나는 하스켈을 배우고 있는데, 이것은 내가 이해하지 못하는 운동이다.목록 이해가있는 소수의 튜플 생성 각 튜플의 합이 더 많음

무한한 소수의 튜플 목록을 만들려고합니다. 각 튜플의 합은 2로 시작하는 상위 짝수입니다. 따라서 출력은 예를 들어. : [(0,2), (2,2), (3,3), (3,5)...

목록 재검토만으로 재귀를 수행하고 싶습니다. 문제는 각 튜플의 합이 더 커야한다는 것입니다. 난 내 자신의 primetest 기능 prim을 정의하고, 같은 시작 :

goldbachList :: [(Int, Int)] 
goldbachList = [(a,b) | b <- [1 ..], a <- [0 .. b], prim a || a == 0, prim b, a+b >= 2, even (a+b)] 

하지만 분명이 내가 가지고 싶은 것보다 훨씬 더 튜플과 무한 목록을 만듭니다. 조건을 포함시킬 가능성이 있습니까? 모든 튜플은 목록 이해도 내에서 이전 튜플과 비교하여 다음 짝수를 합해야합니다.

+0

기술적으로 0은 소수가 아닙니다. 사실 [Goldbach의 추측] (http://en.wikipedia.org/wiki/Goldbach%27s_conjecture "Goldbach의 추측을위한 Wikipedia 기사")에 따르면 모든 짝수 * 2 *는 두 소수의 합으로 쓸 수 있다고 나와 있습니다 . – Bakuriu

답변

2

재미있는 프로그래밍 연습처럼 들리므로 완전한 해결책이 아닌 힌트를 제공 할 것입니다. 시작 템플릿 : [findPair n | n <- [2,4..]]. 목록 이해력이있는 findPair을 구현할 수도 있습니다 (플러스 head - 이는 재귀가 아니므로 추측이 사실이라고 생각하는 경우).