나는 프롤로그를 배우기 시작하고 정수가 주어진 프로그램을 원한다. P
은 A
과 B
에 P = A² + B²
과 같은 정수를 준다. 이 식을 만족하고 A
B
의 값이 아닌 경우, 예를 들어 false
두 정수 제곱의 합으로 (정수) 숫자를 얻기위한 프롤로그 프로그램은 왜 작동하지 않습니까?
P = 5
경우가
A = 1
B = 2
및 (또는
A = 2
및
B = 1
)
1² + 2² = 5
있으므로 제공한다.
나는이 작동합니다 생각 :
giveSum(P, A, B) :- integer(A), integer(B), integer(P), P is A*A + B*B.
를 쿼리 :
giveSum(5, A, B).
을하지만, 그렇지 않습니다. 어떻게해야합니까? 나는 프롤로그에게 매우 익숙하므로 아직도 많은 실수를하고있다.
미리 감사드립니다.
답변 해 주셔서 감사합니다. 몇 가지 질문이 있습니다. 당신이 대답 할 수 있다면 그것은 최고 일 것입니다. '단조롭지 않은 술어'란 무엇을 의미합니까?/1 또는/3은 무엇을 의미하며 label() 함수는 무엇을합니까? 인터넷에서 나는 "Vars의 각 변수에 값을 지정합니다. 라벨링이란 체계적으로 유한 도메인 변수 Vars에 대한 값을 체계적으로 시도한 후에 모두 접지 될 때까지는 의미합니다." 함수 레이블()에 대한,하지만 난 정말 그것을 이해하지 않습니다. 나쁜 습관을 고백 해 주셔서 감사 드리며, 이름을 변경했으며 미래에 밑줄과 선언적 이름을 사용합니다. – Kevin
별도의 질문을하십시오. 그들은 모두 스스로 논의 할 가치가 있습니다 : 1) 단조 로움의 정의와 2) "라벨링"은 무엇입니까? 여러분의 질문 중 단 하나만 주석에 대답 할만큼 간단합니다 :'f/3'은 ** 술어 지시자 **이며,'f'라는 술어를 3 * 인수 *로 표시합니다. 우리는 ** 술어 **에 대해 항상 이야기하지만, ** 술어 **는 * 함수 *보다 일반적입니다. 이름을 위해 중대하다! 술어의 ** 일반성 **에 대한 정의를하는 좋은 선언적 이름을 찾아 사용하는 것은 Prolog에서 프로그래밍 할 때 매우 중요한면이며 아마도 더 어려운 것 중 하나 일 것입니다. – mat