2
this과 비슷한 목록에있는 요소의 모든 요소를 제거하고 싶지만,이 경우 목록에 인스턴스화되지 않은 변수가있을 수 있습니다. 예를 들어 :프롤로그 : 인스턴스화되지 않은 값을 가진 목록의 구성원을 제거하십시오.
delMember(z, [A,B,A,z], L).
L = [A, B, A];
false.
및
delMember(A, [A, B, A, z], L).
L = [B,z];
false.
나는 다음과 같은 delMember을 정의하는 노력이 정의와
delMember(_, [], []).
delMember(X, [X|Xs], Y) :- delMember(X, Xs, Y).
delMember(X, [T|Xs], [T|Y]) :- X \== T, delMember(X, Xs, Y).
, 내가 할 마지막 결과는 정확하지만 여전히하려고 그 전에 변수를 인스턴스화합니다.
?- delMember(A, [A,B,A,z], R).
A = B, B = z,
R = [] ;
A = B,
R = [z] ;
A = z,
R = [B] ;
R = [B, z] ;
어떤 아이디어 ???
: 그래서 완전한 조건과 같을 것이다 (일부 약간 변경 변수 이름은보다 전통적인 될 수 있습니다)'delMember (X, [X | X가, Y) : - delMember (X, Xs, Y) .'는 첫 번째 인수를 두 번째 인수에있는 목록의 머리글과 통합 할 수있는 경우이를 통합합니다. 당신이 그것을 피하려고하기 때문에'=='를 사용해야합니다 : delMember (X, [Y | Xs], R) : - X == Y, delMember (X, Xs, R) .' – lurker
@lurker 감사합니다! 그것은 내가 필요로했던 바로 그 것이었다. 그 대답을하고 싶다면 그것을 기꺼이 받아 들일 것입니다. – lithiium