사실로 주장하지만, 난 그냥 '프롤로그 : 술어 솔루션을 얻기 내가 특정 문제를 가지고
... 그래서 다른 사람들도 혜택을 누릴 수있는 시도하고 일반적인 질문 올 것이다 많은 솔루션 X=2;
X=7
X=5;
을 즉 내가 이러한 솔루션의 각을 얻고 나는이 경우 세 가지 사실을 끝낼 수 있도록 다음 프롤로그 사실로를 주장 술어를 원하는 반환하는 조건을 가지고했습니다 예 fact(2)
fact(7)
fact(5)
fact(5)
를 호출하는 것은 사실 일 것이다하지만이 솔루션을하지 않았기 때문에 우리가 그것을 주장하지 않기 때문에
fact(8)
를 호출하는 것은 잘못된 것입니다.
하지만 나는 각 단일 사실을 주장하는 해결책을 계속 요구해야하는 부분을 갖고 싶지 않습니다. 나는 술어를 호출하여 백그라운드에서 모든 솔루션을 통과시키고 주장한다.
해결 방법 중 하나는 findall을 사용하여 모든 솔루션을 목록에 넣은 다음 목록의 각 요소를 지정하는 목록을 살펴 보는 것입니다. 그러나, 나는 이것이 매우 우아하다고 생각하지 않는다. 리스트를 둘러 보지 않고 그것을하기에 더 좋은 방법이 있어야합니다.
안녕 매트, 이걸 축하해. 이 작품 :). 나는 내가 어떻게 확신하는지 모르겠다. 나는 내가 까다 롭다는 것을 알고 있지만 술어를 무시하는 것에 대해 확신 할 수는 없지만 나는 확실히 당신에게 고마워하지 않는다. 나는 떠날 것이고 이것에 대해 생각해보고 무슨 일이 벌어지는지를 볼 때 이것을 해결 된 것으로 표시 할 것입니다. – ale
+1. @shuyin - 이것은'computation/1'이 성공적으로'false /'를 수행 한 후에 실행될 때마다 (즉, _failure-driven_) Prolog가 실행하기 위해 되돌릴 선택점 (대안 옵션)을 남기기 때문에 효과적입니다.이것은 '계산/1'이 실패/역 추적에서 철회되지 않은 (또는 취소 된) 솔루션의 '주장'을 수행 할 것을 요구합니다. 일단 모든 선택 사항이 고갈되고 주장된다면, Prolog는'false'를 수행 할 수밖에 없으며, 실패로 끝나지 만 그림과 같이'ignore/1'을 사용하여 결과를 무시함으로써 수정됩니다. – sharky