2017-01-03 6 views
2

에 운동에 되돌아와 내가 가진 문제는이 예에서 무슨 일이 일어나고 있는지 이해입니다
이제 프롤로그 알아보기 - Chapter 3 - 예 3 : 후계자이제 프롤로그 알아보기 - 문제를 재귀

숫자에 의문을 제기
numeral(0). 
numeral(succ(X)) :- numeral(X). 

(X)를 내가 이유를 이해하기 위해 고군분투

X = 0 ?  
X = succ(0) ? ; 
X = succ(succ(0)) ? ; 
X = succ(succ(succ(0))) ? ; 
X = succ(succ(succ(succ(0)))) ? 

: 그것은 첫째로 (0), 이러한 방식으로 하나 (0) 부분 SUCC를 증가하는 것은 그 공간이 부족할 때까지 SUCC을 계속 한 후, X 0을 줄 것이다 increme nts succ (0)?

프롤로그는 먼저 사실을 찾아서 일치하므로 첫 번째 0을 찾습니다. 그러면 다른 솔루션이 있는지 살펴보고 규칙을 "볼"것입니다. 규칙에서 인스턴스화 된 X를 0으로 사용합니다. 실패 할 경우 succ (0)가 계속 증가하는 이유를 확인하는 것입니다. X가 succ (0)이 되는가?

어리석은 두뇌에 대한 사과.

답변

2

나는 succ(0)를 증가 이유를 이해하는 데 어려움을 겪고 있는가? 다시 절을 읽어 경우

은 상태 :

여기 아직 때때로 수학적 논리에 사용되는 쓰기 숫자의 또 다른 방법이다. 0, succ 및 왼쪽 및 오른쪽 괄호 ()의 네 가지 기호 만 사용합니다. 이 숫자 스타일은 다음 정의 식으로 정의됩니다.

0은 숫자입니다.
X가 숫자이면 succ (X)도 마찬가지입니다. 내가 먼저 더 높은 수학을 배울 때에 문제가 많은 사람들을 볼 수있는 것들의

하나는 수학을 말할 때 그들의 머리에 아빠 제일 먼저 Arabic numeralsCartesian coordinate system 것입니다.

이 예에서는 상징적으로 생각해야합니다. Symbolic computation, 또는 근본적으로는 Abstract rewriting system입니다.

이 예에서는 아라비아 숫자를 사용하지 않고 숫자를 설명하는 기능적인 방법을 사용합니다. 즉, 숫자를 설명하기 위해 시작 기호 0과 기능 succ(x) 만 있습니다. 내가 말할 참고 기호와하지 수 있기 때문에 기호 0 만이이 경우 natural numbers

그래서

0 is 0 
1 is succ(0)  - The successor of 0 is 1. 
2 is succ(succ(0)) - The successor of the successor of 0 is 2 or 
         The successor of 1, e.g. succ(0), is 2. 

등등에, 문맥에 둘 때 의미한다. Lambda calculus에 대한 정보는 자주 표시됩니다.

또 다른 방법은 키워드 inductive입니다. 귀납법을 사용하면 시작 사실과 다음 사실로 이어지는 규칙이 필요합니다.따라서 0은 사실이며 다음 사실로 연결되는 규칙은 succ(X)입니다.

+0

이 개념을 다루는 기능 프로그래밍에 대한 전체 책은 다음을 참조하십시오. [람다 계산법을 통한 기능 프로그래밍에 대한 소개] (https://pdfs.semanticscholar.org/d986/546bc3780db3a3c0f8d88b35e421ae4eec21.pdf) 참고 : 링크는 무료 버전이지만 많은 것을 사용하는 경우 [사본 구매] (https://www.amazon.com/Introduction- Functional-Programming-Calculus-Mathematics/dp/0486478831)해야합니다. –

+0

아, 알 겠어! 우수한 설명과 책 제안에 감사드립니다 - 나는 그것이 큰 도움이 될 것이라고 생각합니다. 매우 감사. – qwerty

+0

다른 유사한 예는 다음을 참조하십시오. [자연수의 설정 이론적 정의] (https://en.wikipedia.org/wiki/Set-theoretic_definition_of_natural_numbers#Definition_as_von_Neumann_ordinals) –

4

가이 코더 (Guy Coder)가 무슨 일이 벌어지고 있는지에 대해 자세히 설명해 주었다고 생각합니다. 나는 그의 귀납적 인 설명의 약간의 변형을 제공하고, 잘하면, 더 명확하게하는 데 도움을 줄 것이다.

는 프롤로그 규칙이 말에 대해 생각 :

numeral(0). 

이 말한다, 0 숫자이다.X이 숫자입니다 숫자 경우

numeral(succ(X)) :- numeral(X). 

이 말한다, succ(X)이다.

첫 번째 규칙에 따르면, 0은 숫자입니다. 즉, numeral(0)이 참 (성공)입니다. 두 번째 규칙에서는 0이 숫자이므로 succ(0)은 숫자 여야합니다 (numeral(succ(0))이 참). succ(0)은 숫자이므로 두 번째 규칙에 따라 succ(succ(0))은 숫자 여야합니다 (numeral(succ(succ(0)) 참). 등등 ...

+0

내 질문을 살펴볼 시간을내어 주셔서 감사합니다. 귀하의 답변은 정말 저를 머리 속에서 더 명확하게 만들도록 도왔습니다! 정말 감사합니다! :) – qwerty