2013-06-20 5 views
1

나는 프롤로그를 처음 접했고 목록 개념을 고수하려고한다. 나는에 find(a, List) 결과를 조회 술어 만들려고하고목록에 프롤로그에 원자 추가하기

value(a, 1). 
value(b, 2). 
value(a, 3). 
value(a, 4). 
value(c, 3). 

: 내가 노력하고 예는 단순히 모든 사실 넘어 List = [1, 3, 4].

를하고 목록에 일치하는 사람을 추가합니다.

나는 이런 식으로 시도했다. 그러나 그것은 바로 모든 것 같지 않습니다 이러한 기본적인 질문에 대한

find(X, List):- 
    value(X, D), append([D], [], [List|Rest]), find(X, [Head|List]). 

죄송합니다. 모든 지침을 부탁드립니다.

참고 : 목록의 모든 값을 추가하여 프로그램을 확장하려고합니다.

+0

결과 목록을 합산하려면'sumlist (List, Sum)'내장 술어 만 사용해야합니다. – lurker

답변

3

것은 여기를보세요 : http://www.swi-prolog.org/pldoc/doc_for?object=findall/3

나는 당신이 이미 존재하는 일을하려고 무엇을 믿고,이 시도 :

?- findall(X,value(a,X),List). 

나는이 시스템에 설치 프롤로그이없는 내가 할 수 없습니다 완벽하게 테스트 해보세요.하지만 그걸로 당신이 원하는 것을 얻을 수 있습니다.

편집 : 죄송합니다. swi에 가입하면 인수가 반전되었음을 깨달았습니다. 지금 업데이트 된 코드를 참조하십시오. 또한 그것을 테스트하고 그것을

편집이 :-)

작동 : 위의 의견에 따라, 당신은 어떤 경기를 'A'를 값을 수집하고이에 결합 할 수있는 합 얻을 수 :

?- findall(X, value(a,X), List), sumlist(List, Sum). 

을 - Ken