2012-03-21 2 views
1

위치 (1, list (1, list (2, nil)), Z)와 같은 데이터 구조에서 요소 X의 위치를 ​​찾기 위해 퀴즈에 나왔습니다. Z = 3. 여기서 Z는 a의 데이터 구조에서 요소 X의 위치입니다 (예 : list, 1, list (3, nil)).이 술어가 작동합니까? 이것은리스트

 position(X,list(nil),0).    %empty list 
     position(X,list(X,T),1).    %list with X as head or first element 
     position(X,list(H,T),Z):- 
          position(X,list(T,nil),Z1), %X is in tail of list (H,T) 
          Z is Z1 + 1. 

답변

2

아니오, 그것은 작동하지 않습니다 정확한 조건은 다음과 같습니다 : 위의 형식 여기

의 목록은 내 솔루션이었다.

position(X,list(nil),0).    %empty list 
position(X,list(X,T),1).    %list with X as head or first element 
position(X,list(H,T),Z):- 
       position(X, T, Z1), %X is in tail of list (H,T) 
       Z is Z1 + 1. 

position(X,list(T,nil),Z1), %X is in tail of list (H,T) 작성 루프가 발생하며 list(T, nil)으로 position을 호출 할 이유가 없기 때문에 논리 오류가 발생합니다. T은 이미 목록 또는 nil 아톰입니다.

+0

예 ofCourse는 논리에서 의미 오류를 나타내지 만 position (X, [], 0)과 동일하지 않습니다. 위치 (X, [X | T], 1).위치 (X, [H, T], Z) : - 위치 (X, T, Z1), Z는 프롤로그의 미리 정의 된 목록 구조에 대해 Z1 + 1입니다. @andreapier –

관련 문제