편집 : 나는 싱글 톤 변수를 알아 냈습니다. 프롤로그는 데이터 뱅크에 대해 캡 티알 라이즈 된 단어를 좋아하지 않습니다. 나는 또한 그 코드에 엄청난 변화를 주었다.프롤로그 기능 (예 : 자동차 소유권 기록)
편집 : : 실현 재귀 호출이 없습니다. Derp
나는 하스켈과 함수 프로그래밍에 대한 경험이 있지만 프롤로그에 상당히 익숙하다.
나는 진술을 사실로 만드는 모든 가능한 값을 출력하는 데 문제가있다. 나는 그것이 지난 몇 시간 동안 그것을 걷고 있었으므로 그것이 논리 오류라고 생각하지 않는다. 그러나 나는 틀릴 수있다.
이 문제는 자동차 소유권 기록을 만들려고 시도하고 있습니다.
- 나는 사람이 자동차를 소유하고 있다는 것을 알고 있습니다. - Hee/그녀가 딜러로부터 자동차를 구입했습니다. - 그녀는 이전 자동차 소유자에게서 구입했습니다.
그래서이 사실을 알고 저는 자동차, 소유자 및이 재귀의 기본 케이스로 작동 할 별도의 딜러 변수를 만드는 데이터 뱅크를 설정했습니다.
car(prius).
car(bmw).
owner(meg).
owner(nora).
dealer(d).
boughtFrom(meg,nora).
boughtFrom(nora,d).
나는 대리점에서 구입 한 nora에서 구입 한 meg를 설립했습니다. 당신이 딜러로부터 구입할 때 재귀를 계획하고 있습니다. 왜냐하면 이것이 기본 케이스의 끝점이기 때문입니다. 당신이 상인 경우
ownCar(X,Y) :- boughtFrom(X,d), car(Y).
ownCar(X,Y) :- ownCar(boughtFrom(_,prevowner(X)), car(Y)).
당신은 자동차의 소유자가 될 수 또는 이전 소유자로부터 차를 구입하는 경우 : 그래서 논리는 다음과 같이 간다. 딜러 또는 다른 이전 소유자로부터 이전 주인을 구입 한 경우 이전 소유자는 소유자입니다. 그래서 멈추는 유일한 시간은 그 사람이 딜러로부터 자동차를 구입했을 때입니다.
답장을 보내 주셔서 감사합니다. 좋아요. 재귀 적 문제를 더 잘 이해합니다. 하지만이 기능으로 달성하려는 것은 이전 소유자의 이름을 표시하는 것입니다. 그럼'? - ownCar (X, Prius) '를 입력하면은'X = meg.'를 출력합니다. 'X = nora.' 그리고 현재 그녀가 현재 소유자이기 때문에 나는 단지 메구 만 얻습니다. 정말 함수 이름을 carOwnerHist로 변경해야한다고 생각합니다. – Mark