2015-01-24 3 views
-4

저는 하스켈을 배우고 있습니다. "모든 것이 가치"라는 순수 함수형 언어이기 때문에 "모든 것이 가치"이기 때문에 원하는 모든 것을 계산할 수 있다고 믿습니다!하스켈 - 프로그램이 응답하지 않습니다.

그러나 사용자 입력 n이 주어지면 조건 a^n + b^n == c^n을 만족하는 가장 작은 정수형 튜플 (a, b, c)을 찾으려고 시도하는 다음 프로그램을 고려하면 정수 :

func :: Integer -> (Integer, Integer, Integer) 
func n = head $ filter (\(a, b, c) -> a^n + b^n == c^n) listOfTuples 

listOfTuplesWith :: Integer -> [(Integer, Integer, Integer)] 
listOfTuplesWith 1 = [(1, 1, 1)] 
listOfTuplesWith x = [(a, b, x) | a <- [1 .. x - 1], b <- [1 .. x - 1]] ++ 
    [(a, x, b) | a <- [1 .. x - 1], b <- [1 .. x]] ++ 
    [(x, a, b) | a <- [1 .. x], b <- [1 .. x]] 

listOfTuples = concatMap listOfTuplesWith [1 .. ] 

main = do 
    line <- getLine 
    print $ func $ read line 

I 키 2는 프로그램이 기대 값을 출력한다 (3, 4, 5), 단, I 키 (3)에서, 프로그램은 영원히 정지 같다. 내 프로그램에 무슨 문제가 있니?

+15

[페르마의 마지막 정리] (http://en.wikipedia.org/wiki/Fermat%27s_Last_Theorem) – dewaffled

답변

7

프로그램에 이상이 없습니다. 그것은 찾을 수있는 그러한 트리플이 없기 때문에 그것은 가 영원히 끊어 않습니다 때문에 영원히 걸려있는 것 같습니다.

+4

답변에 코드가 없습니다. Coq, Agda 또는 Isabelle 페이지만으로 수십만 페이지를 증명할 수 있어야합니다. – dfeuer

+0

Haskell에서 프로그램이 존재하지 않는 값을 지정하면 그 값이 영원히 멈출 것입니까? –

+1

@MichaelTsang IRC의 친절한 사람들과이 질문에 대답하는 방법에 대해 많은 심의와 협의를 거친 후 "예". –

관련 문제