2014-02-21 2 views
0

영어 산술 표현식 목록을 취하여 숫자 결과를 산출하는 술어 calculator/2을 정의해야합니다. 시스템은 1-20의 번호를 처리 할 수 ​​있어야합니다.Calc/2 술어

예 실행 :

?- calculator([three,times,two],Total). 
Total=6 
yes 

?- calculator([twenty,times,three,plus,five,divided_by,two], Total). 
Total = 32.5 
+1

재미있는 소리. 지금까지 뭐 해봤 어? – lurker

+0

절대적으로 아무것도. 이것은 프롤로그를 처음 경험 한 것이고 어디서부터 시작해야할지조차 모릅니다. – user3335366

+1

이것은 수업 및 첫 번째 과제물에 대한 과제입니까? http://www.doc.gold.ac.uk/~mas02gw/prolog_tutorial/prologpages/ 또는 http://www.learnprolognow.org/lpnpage.php?pageid=online과 같은 자습서를 통해 제안 할 것입니다. Googling "프롤로그 자습서"로 다른 사용자를 찾을 수 있습니다). – lurker

답변

3

이 말한 누군가를위한 매우 어려운 작업이다 "이것은 나의 처음 경험 프롤로그이고 심지어 어디서부터 시작 모른다."

몇 가지 시작해 보겠다.하지만 실제로 몇 가지 Prolog 자습서 ('Learn Prolog Now', 주석에 @mbratch로 언급 됨)가 필요하다. 그 일을해라. (당신은 단지 숫자 만 1-20을 처리해야하기 때문에 단순히 그가 한 모든 가능성을 열거 할 수 있습니다)

첫째, 당신은 숫자 이름에 대한 일부 프롤로그 사실을 정의 할 수 있습니다

number(one, 1). 
number(two, 2). 

을 ...

calculator([A, plus, B], Result) :- 
    number(A, ValA), number(B, ValB), Result is ValA + ValB. 

calculator([A, times, B], Result) :- 
    number(A, ValA), number(B, ValB), Result is ValA * ValB. 

삿 :

number(twenty, 20). 
은 그럼 그냥 두 숫자 작동 몇 가지 조건을 정의 할 수 있습니다 예를 들어 연산자의 우선 순위 규칙은 사용되지 않습니다. 그런 다음 목록에 두 개 이상의 숫자 (3 개 이상의 항목)가 들어 있으면 위의 술어를 처음 세 개의 목록 항목에 적용하고 재귀 적으로 진행할 수 있습니다.

일부 프롤로그 자습서를 통해 작업을 마친 후 여기서 계속할 수 있습니다.

+0

응답 해 주셔서 감사합니다. ProLog Now 사이트를 사용하고 있지만 아직 파악할 수 없습니다. 영어 문구를 먼저 숫자로 번역하고 분명한 작업을 나열하는 것은 의미가 있지만 숫자가 2 개 이상이거나 작동하지 않는 목록에서는 길을 잃습니다. 나는 클릭하기에 충분한 프로그래밍 배경이 없다고 생각한다. – user3335366

+0

@user3335366, Sergey의 제안에 이어이 문제에 적용되는 Prolog 프로그래밍의 중요한 측면은 List의 개념과 반복적으로 처리되는 방식입니다. 다음은 이러한 개념을 설명하는 하나의 자습서입니다 (Google에서 "프롤로그 재귀 목록 처리"참조) : http://faculty.simpson.edu/lydia.sinapova/www/cmsc310/Prolog/PrologLessons/LS04-listsSL.htm. Prolog는 다른 프로그래밍 언어와 매우 다르기 때문에 다른 언어로 된 프로그래밍 배경이 부족하다는 점은 상처보다 도움이 될 수 있습니다. – lurker