4
다른 목록 (L)의 요소를 하나씩 추가하여 목록 (L2)을 만들고 싶습니다. 결과는 입력과 정확히 일치해야합니다. 이 작업은 어리석은 일이지만 목록을 통해 재귀하고 특정 요소를 제거하는 방법을 이해하는 데 도움이됩니다.재귀와 프롤로그에서의 추가 사용
create([1,2,3,4], L2)
반환
원하는 결과 아닙니다L2 = [1|create([2,3,4], **)\.
하여 호출
create(L, L2) :- (\+ (L == []) -> L=[H|T], append([H], create(T, L2), L2);[]).
:
내가 함께 다음과 같은 코드를 삽입했다.
답변 해 주셔서 감사합니다. 나는이 줄을 가지고 나왔다 : remove1 (L, L2) : (L2, H, L2)를 추가 (\ + (L == []) -> L = [H | , remove1 (T, L2); []). 그러나 오류가 발생합니다. _G256 오류 : 전체 스택이 없음 왜 그럴까요? – screenshot345
필자는 각 술어가 각 인수 구조에 대해 한 번 선언되는보다 일반적인 프롤로그 구문에 익숙하다는 것을 고백해야합니다. 내가 말할 수 있지만, 스택 오류가 발생하면 재귀가 종료되지 않았다는 의미입니다. 이는 종료 기준이 잘못되었거나 나머지 프로그램이 사용자가 생각하는대로 인수를 축소하지 않기 때문입니다. 이 경우 나는 후자를 의심하고 추가 정보를주의 깊게 살펴 보라고 조언 할 것입니다. 왜냐하면 아마 양쪽에 L2를 원하지 않을 것 같기 때문입니다. – charlieb