2012-01-05 3 views
0

확인. 그게 내 문제 야. 목록에있는 제품의 모든 가격을 요약하는 술어를 구현해야합니다. 그러나, 지금 당장은 더 이상 그럴 생각이 없습니다. 내가 뭘 잘못하고 있니? 미리 감사드립니다. 프롤로그 - 사실에 대한 약간의 연습

domains 
    state = reduced ; normal 

database 
    producte (string, integer, state) 
predicates 
    nondeterm calculate(integer) 

clauses 
    % ---> producte(description , price , state) 
    producte("Enciam",2,normal). 
    producte("Llet",1,reduced). 
    producte("Formatge",5,normal). 
    calculate(Import):- 
     producte(_,Import,_). 
    calculate(Import):- 
     producte(_,Import,_), 
     calculate(Import2), 
     Import=Import2+Import,!. 

Goal 
    calculate(I). 
+0

무엇을하려하십니까? PROLOG에서는 사실을 지정해야합니다. "producte ("Enciam ", 2, normal) 줄입니다." Enciam이 가격 2와 상태 정상화를 통해 생산된다는 사실은 사실입니다. "calculate (Import) : - producte (_, Import, _)"줄은 다음과 같습니다. Import가 가격 수입을 가진 제품이 있다면 계산이 만족 스럽다고 말합니다. 그것은 많은 의미를 가지지 않습니다. 목록에있는 것들의 합계를 계산하는 예제를 원한다면, 나는 하나를 제공해 드리겠습니다. – Patrick87

+0

고맙습니다. 그러나 그것이 "사실/데이터베이스"와 관련되어야한다면? – mkll

답변

1

면책 조항 :이 프롤로그에 관해서 내가 조금 바보입니다. 또한 저는 프롤 로그 통역사에 대한 액세스 권한이 없습니다.

정식 예를 들어, 목록의 합계 :

sum([], 0). 
sum([Head | Tail], Total) :- sum(Tail, Temp), Total is Head + Temp. 

이 findall은/3 목록을 만들기 :

findall(Val, producte(_, Val, _), Vals). 

발스 합계를 귀하의 목록이 있습니다.

업데이트 : 귀하의 의견에 따라, 나는 통역사에 대한 액세스 권한이 없어도 조금 벗어났습니다.

가 findall은에 의해 생성되는 당신의 발스 목록을 합산의 결과를 수신하여 하나의 목표 I를 사용 :이가하는 생각은 무엇

calculate(I) :- sum(Vals, I), findall(Val, producte(_, Val, _), Vals). 

. 하지만 필자는 프롤로그를 사용하여 내가 원하는 것을 수행 할 수있는 구문조차도 가지고 있지 않을 수도 있기 때문에 오랜 시간이 걸렸다. 그러나 작은 편차는 단일 목표로 원하는 것을 성취해야합니다.

+0

도움에 감사드립니다. 나는 단지 "목표"에서 하나의 매개 변수를 전달할 수 있습니다 : 나는 (받을 총 가격). – mkll

+0

@mkll - 업데이트가 도움이되지 않는다면 Mog의 대답으로 충분할 것입니다. 나는 인터프리터에 접속하지 않고도 내 대답을 수정하기 위해 시행 착오 프로그램을 할 수 없다. – ccoakley

+0

정말 고마워요. 나는 그 문제를 해결했다 !!! – mkll

0

findall은 부분 :

calculate(Price) :- 
    List = [ Price || producte(_, Price, _) ], 
    sum_list(List, 0, Sum). 

sum_list 부분 :

sum_list([], Acc, Acc). 
sum_list([Head|Tail], Acc, Sum) :- 
    NewAcc is Acc + Head, 
    sum_list(Tail, NewAcc, Sum). 

내가 비주얼 프롤로그 문서에 따라 작동해야이 라인을 따라 뭔가를 생각하지만 난 좀 싶어 visual- 설치하지 마십시오 프롤로그로 테스트 해보세요 ...

+0

나는 그 문제에서 길을 잃었다. 2 개의 매개 변수를 전달해야하는 술어를 구현한다고 생각하십니까? calculate (List, Sum)리스트와 정수. – mkll

+0

내가 편집 했으므로 이제 시각적 인 프롤로그 방식에 적합해야합니다. – m09

+0

고마워요. 나는 그 문제를 해결했다! – mkll