L이 목록에없는 R의 모든 용어를 포함하는 목록 인 경우에만 성공하는 조건부 f (L, R)을 작성해야합니다. 예를 들어 :프롤로그의 하위 목록에있는 모든 요소의 목록
f(L,[1,2,3,[4,5,6],[[7,8,9]],[]]).
는 제공해야합니다 :
L = [1,2,3,4,5,6,7,8,9,[]]
빈 목록이 결과에 존재해서는 안 :
L = [1,2,3,4,5,6,7,8,9]
내가 대신 다음과 같은 결과를 제공하는 조건을 썼다. 내 술어는 다음과 같습니다.
f([],[]).
f(V,[H|T]):- H = [_|_] -> append(L,R,V),
f(L,H), f(R,T),!;
V = [H1|T1], H1=H, f(T1,T).
나는 두 가지 의문의 여지가 있습니다. 우선 빈 목록이 결과에 나타나서는 안됩니다. 또한 나는 컷 (!)을 넣지 않으면 왜 효과가 없는지 모르겠다. 사실, 내가 컷을 넣지 않으면 위와 같이 결과가 나옵니다.하지만 다른 결과를 요구한다면 그것은 영원히 반복됩니다. 나는 이것이 왜 반복되어야하는지 정말로 이해하지 못한다.
이 참조 호출 질문 http://stackoverflow.com/questions/11220567/flatting-a-list/. 일반적으로 입력은 첫 번째 인수이고 두 번째 출력은 f ([1,2,3, [4,5,6], [[7,8,9]], []], L) ==> L입니다. [1,2,3,4,5,6,7,8,9] – joel76