기본 Prolog에서 패러다임을 이해하기 어려운 언어로 도움을 요청합니다. 나는 다른 언어들 (C++, Lisp, Java, Assembly 등)에 익숙하지만 Prolog와 완전한 초보자이다.프롤로그에서 2D 배열로 작업
해결해야 할 사항 - 기본 영어 : 2 개의 매개 변수가있는 경우 2D 배열에서 해당 번호를 찾으십시오.
문제는 숫자를 골라 내고 그 번호의 색깔을 선택한 다음 주어진 숫자가 들어있는 집을 골라달라고 웹에 두뇌없이 쉬운 퍼즐입니다. 퍼즐은 각 색상/집 조합에 대해 하나의 숫자 만 있도록 설정됩니다.
function guess(Color, Houses) :-
<--Need what goes here -->
green(1, 15, 23, 24).
pink(2, 6, 10, 18).
etc...
houseA(2, 4, 7, 14).
etc...
코드는 올바른 번호를 선택하는 색상과 주택을 일치해야합니다 장소에 현재 어떤
. 그래서 예를 들면, 주어진 "?- guess(pink, houseA)"
는 "Your number is 2."
나는 프롤로그에서이를 구현하는 방법에 대한 아이디어를 쓰고있다 반환해야하고 그들 중 누구도 더 이상 저에게 없습니다. 어떤 색상을 검색해야하는지, 집과 색상간에 어떤 숫자가 일치 하는지를 확인하는 방법, 심지어 값을 "반환"하는 방법까지도 if/else 문을 구현하는 방법을 모르겠습니다.
나는 언어에 대해 요점을 놓치거나 길을 잃어 버렸다.
도움을 주시면 감사하겠습니다. 고맙습니다!
매우 유용한 답변 - 감사합니다! 프로그램이 작동하지만 2 개의 쿼리가 있습니다. 먼저 "호출"이란 무엇입니까? 필자는 목록의 이름과 매개 변수를 비교하는 내장 함수를 사용하지만 모든 언어에 대해 이상하게 보입니다. 둘째, 내 프로그램 출력은 다음과 같습니다. "사용자 번호는 25입니다. 번호 = 25" 그는 충분하지 못하지만, 선생님은 Lisp-y 아이디어처럼 보이는 프롤로그 패러다임을 짧게 설명했습니다. 평가 된 마지막 값을 반환합니다. 이 작업은 Prolog에서 어떻게 작동합니까? Prolog에게 두 번째 줄을 인쇄하지 말라고 어떻게 말합니까? –
통화 부분에 대해서는 swi-pl 매뉴얼 [here] (http://www.swi-prolog.org/pldoc/doc_for?object=call/2)을 참조 할 수 있습니다. 이것은 기본적으로 술어 보류를 실행하는 술어입니다 당신이 인수로 첫 번째 인수로 전달한 이름으로 두 번째 인수로 전달합니다. 호출은 2에서 원하는만큼 많은 수의 arits에 대해 정의됩니다 (인터프리터 모드에서는 6 개). 기본적으로 인터프리터 모드에서 최대 5 개의 인수를 처리하는 조건부에 대해 호출 할 수 있습니다. 두 번째 부분에서는, 나는 프롤로그가 통일에 관한 그의 시도를 뿌리 째 뽑지 못하게하는 방법을 모른다. 그러나 다른 사람들은 나보다는 더 많은 통찰력을 가지고 있을지도 모른다. :) – m09