2014-09-19 4 views
-2

으로 대체하여 목록의 요소를 프롤로그로 대체하는 방법은 무엇입니까?목록의 요소를 Prolog

예 :

replace(2,[1,2,3,2,1],5,X) 

가해야 모두 솔루션 :

  • X = [1,5,3,2,1]
  • X = [1,2,3,5,1]
+0

이 질문은 특정 시도에 대한 도움을 요청하는 것이 아니라 완전한 코드 솔루션을 요구하기 때문에 주제와는 거리가 먼 것처럼 보입니다. – lurker

답변

1

당신은 입력 목록을 반복하여 수행 할 수 있습니다

%replace(_, [], _, []). 
replace(Element, [Element|Tail], NElement, [NElement|Tail]). 
replace(Element, [CurElement|Tail], NElement, [CurElement|NTail]):- 
    replace(Element, Tail, NElement, NTail). 

샘플 입력 : 첫 번째 절을 주석 처리를 제거하면

?- replace(2,[1,2,3,2,1],5,X). 
X = [1, 5, 3, 2, 1] ; 
X = [1, 2, 3, 5, 1] ; 

또한 출력 목록이 변경되지 않은 솔루션 출력 남아있는 것 곳.

첫 번째 절 (주석 처리 됨)은 목록을 반복하는 기본 사례입니다. 대체 된 빈 목록의 목록은 빈 목록임을 나타냅니다.

두 번째 조항은 목록의 헤드가 요소와 통합되면 대체 된 요소와 나머지 요소 (꼬리)를 포함한다고 설명합니다.

세 번째 절은 재귀 적 단계입니다. 세 번째 절은 첫 번째 요소를 취해 목록의 뒷부분을 사용하여 재귀 적으로 호출하며, 출력은 재귀 호출의 결과와 연결된 요소입니다.

+0

%의 기능은 무엇입니까?, 어떻게 작동합니까? – fanrenwu

+0

@fanrenwu : 프롤로그 주석 마커입니다. 그 절은 주석으로 처리됩니다. %를 제거하면 해당 절이 프로 시저의 일부가되므로 재귀의 기본 사례가 추가됩니다. – gusbro

관련 문제