2012-11-15 3 views
1

목록에 "멤버"함수를 만드는 방법을 알아 내려고했습니다. 지금까지 나는 이것을 만들었지 만 정답에 가깝지는 않습니다.프롤로그 멤버 함수 목록

spec([system001,hard_drive(50)]). 
spec([system002,hard_drive(150)]). 

list1(Component):- 
    spec([Component,X|Y]). 

which_system(Component, Component). 

which_system(Component):- 
    list1(Component), 
    which_system(X, Component). 

나는 그것이 작동 which_system(system001). 에 입력


하지만 난 실 거예요 나는 그것이 hard_drive 찾기 (50)를 만드는 방법을 잘 모릅니다 ... 전혀 작동 which_system(hard_drive(50)). 에 넣어 때.

누군가가 도울 수 있기를 바랍니다.

감사합니다.

+2

답변을 받으면 질문을 파기하지 마십시오. 이 사이트의 요점은 비슷한 질문을 가진 새로운 사람들을 돕기위한 오래된 질문입니다. –

+0

@ user1726910 : 질문의 형식을 개선하는 것이 다른 사람들에게 호의적 인 것입니다. – false

답변

3
당신이 시스템에 더 많은 구성 요소가 있습니다 경우 예를 spec([system001, hard_drive(50), hard_drive(100)]).을 위해, 또한 작동

which_system(Component, System) :- 
    spec([System|Components]), member(Component, Components). 

를 필요한 것보다 더 복잡하고있는

.

?- which_system(hard_drive(50), S). 

은 S를 system001로 지정합니다.

+0

아, 내게는 전형적인 것이 더 복잡해. 문제를 해결해 주셔서 감사합니다. 지금과 같이 확실히 작동하지만, "which_system (hard_drive (50)")을 사용하는 것이 가능합니까? 그런데 고마워요. – user1726910

+0

그런 식으로하면됩니다. true/false.보다 적절한 이름은 exist_system (hard_drive (50))이 될 것입니다. 어쨌든 Prolog는 동일한 이름과 인수가 다른 술어를 지원합니다. 흥미로운 것은 드롭하지 마십시오 ... which_system (Component) : - spec ([ _ | Components]), member (Component, Components). ' – CapelliC

+0

감사합니다. 도움이되었습니다. :) – user1726910