2013-04-14 1 views
0

자르지 않고 목록을 지우고 싶습니다. 나는 시도했다 :프롤로그 지우기 컷을 사용하지 않고 긍정적 인 요소 목록

filter([],[]). 

filter([H|T],[H|S]) :- 
    H<0, 
    filter(T,S). 

filter([H|T],S) :- 
    H>=0, 
    filter(T,S). 

그러나 그것은 작동하지 않는다. 경우 - 당시 다른 것은 프롤로그에 구축합니다 때로는 "는있는 것으로 설명되어 있기 때문에

filter([ ],[ ]). 
filter([H|T],X) :- 
    (H > 0 -> X = Y ; X = [H|Y]), 
    filter(T,Y). 

:

?- filter([1,0,-6,7,-1],L). 

L = [-6,-1]; %false 
no 

L=[0,-6,-1] %true 
+1

귀하의 술어가 무엇을해야하는지 명확하게 설명하십시오. – Haile

답변

0

여기를 수행하는 한 방법 : 여기

내가 시도 할 때 무슨 일이 있었는지입니다 숨겨진 컷 "은 Prolog가이 구문의"if "부분에서 논리적 인 결과를 재 시도하지 않음을 의미합니다 (첫 번째 결과 만 커밋합니다). 코스 강사가이 솔루션에 이의를 제기 할 수도 있습니다 실제 절단은 사용되지 않음).

하지만 해결책이 부분적으로 잘못되었습니다. 당신은 긍정적 인 요소로 0의 요소를 덩어리로 만들 것입니다. 질문의 문구에 긍정적 인 요소 만이 목록에서 "지워져야"함을 암시합니다.

+0

대단히 감사합니다. 나는 그것을 아주 잘했다!. 다시 한번 감사드립니다. – user2280033

+0

감사합니다, @bubakazouba, 독수리 눈 잡기. – hardmath