저는 프롤로그로 시작했는데, 다음과 같은 이유가 예상대로 작동하지 않는 이유를 알 수 없습니다. 리스트 L2가 L1에 포함되어 있으면 참을 리턴하는 술어를 작성하려고합니다. 이 내가 쓴 것입니다 : 프롤로그 술어 문제
assert(contains (L1, L1)).
assert(contains(L1, [X|L2]):-member(X, L1), contains(L1, L2)).
assert(contains(L1, [])).
나는이에 해당 될 것입니다 생각 "의 X의 경우 'L3 = X | L2'는 L1이며, 또한 L2는 L1에 다음 사실이다"를 포함하여, (L1, L2)은 모든 구성원이 통과되고 마지막 옵션이 남거나 L1에없는 구성원을 찾을 때까지 재귀 적으로 변환되어 술어에서 실패합니다.
불행히도 그런 식으로 작동하지 않는 것 같습니다. 그것은 ([1,2,3], [1,4,5]) 패스를 포함하지만 멤버 (X, L1)의 값만 반환하는 것으로 보이지만 ([1,2,3], [4, 1,5])는 그렇지 않습니다.
내가 뭘 잘못하고 있니?
어떤 Prolog 구현을 사용하고 있습니까? 나는 SWI-Prolog에서 문제를 재현 할 수 없다. – mercator
SWI-Prolog 버전 2.7.12 –
2.7.12? 정말?! 5.6.x 나 5.7.x와 같은 새로운 것을 사용해보십시오. – Kaarel