프롤로그에 뭔가를 쓰고 있는데, 내가 추가를 사용하면 [a, b, c | _]와 같은 목록이 반환됩니다. 모든 초기화되지 않은/임의의 값을 잘라내는 표준 술어 (또는 간단한 방법)가 있습니까?초기화되지 않은 목록 값을 프롤로그에서 자르지 않음
편집 추가 : 길이가 임의의 길이 일 수 있기 때문에 길이가 작동하지 않습니다. 미리 시간이 얼마인지 알지 못합니다. 그렇지 않으면 이미 트리밍에 사용했을 것입니다.
프롤로그에 뭔가를 쓰고 있는데, 내가 추가를 사용하면 [a, b, c | _]와 같은 목록이 반환됩니다. 모든 초기화되지 않은/임의의 값을 잘라내는 표준 술어 (또는 간단한 방법)가 있습니까?초기화되지 않은 목록 값을 프롤로그에서 자르지 않음
편집 추가 : 길이가 임의의 길이 일 수 있기 때문에 길이가 작동하지 않습니다. 미리 시간이 얼마인지 알지 못합니다. 그렇지 않으면 이미 트리밍에 사용했을 것입니다.
왜 append가 그런 목록을 제공하는지 확인해야합니다. 당신이보고있는 문제를 해결 APPEND의 행동을 관찰하기 때문에 :
?- append([a,b,c|_], X, L).
L = [a,b,c|X]
?- append([a,b,c|_], X, L), X=[].
L = [a,b,c]
는이 같은 열린 목록을 닫을 수 있습니다 :
close_list([]) :- !.
close_list([_ | T]) :-
close_list(T).
당신이 변수에 도달하는 모든 요소를 걸어야 즉 tail을 입력 한 다음 빈 목록에 바인딩합니다.
사용법 : 당신이 꼬리에 바인딩 된 변수를 누르고 있으면
?- List = [a, b, C, d, 2.2 | _], close_list(List).
List = [a, b, C, d, 2.2].
다음은 훨씬 간단하게 :
?- List = [a, b, C, d, 2.2 | Tail], Tail = [].
List = [a, b, C, d, 2.2],
Tail = [].
당신은이를 위해 length/2
를 사용할 수 있습니다!
?- Xs = [1,2,3|_], length(Xs, N).
Xs = [1,2,3],
N = 3 ;
Xs = [1,2,3,_G1022],
N = 4 ;
Xs = [1,2,3,_G1022,_G1025],
N = 5
그러나 여기에 설명하려는 내용이 분명하지 않습니다. 가장 작은 솔루션을 계속 사용하려면 once(length(Xs, N))
을 대신 사용하십시오.
리스트가 []
으로 종료되지 않은 경우 목록을 잘못 작성하는 것이 좋습니다.
확인했는데 내 술어 중 하나의 기본 사례가 꺼져있는 것처럼 보입니다. 감사. – LinearZoetrope