2015-01-31 4 views
1

am a Пролог новичок и в настоящее время изучаю логику при вычислении одновременно, поэтому, пожалуйста, извините, что я не согласен на эту тему.Добавление двух переменных int из KB [Prolog]

Я пытаюсь предоставить условное условие, которое позволяет пользователю добавлять любые два из 1, 2 и 3, чтобы найти свою сумму. Я хочу, чтобы сделать запрос взять оба входа для добавления, а третью переменную, которая содержит расчетную сумму:

?- sum(1, 2, X) 
X = 3. 

В этом случае я не уверен, что, как определить КБ таким образом, что этот запрос может повлечь за собой. Могу ли я избежать определения отдельных предикатов для каждого номера?

Благодаря

+0

Если вы расчета суммы, вам не нужен KB. Вам просто нужно выполнить арифметику. 'X равно 1 + 2'. Или более гибко, 'sum (X, Y, Результат): - Результат - X + Y.'. – lurker

+0

см. Плюс/3, может быть, это то, что вы хотите – CapelliC

+0

Работает безупречно, спасибо. Однако, если бы я попытался ограничить ввод данных только 1,2 или 3, тогда мне не нужно было бы внедрить КБ? – user3072912

ответ

1
allowed_input(1). % your 
allowed_input(2). % knowledge 
allowed_input(3). %  base 

restricted_sum(A,B,C):- 
    allowed_input(A),  % test user input's 
    allowed_input(B),  % validity 
    C is A+B.    % test the result 

(согласно разъяснениям Op в in the comments). Испытание:

2? - limited_sum (1,2,3).
true.

3? - limited_sum (3,2,5).
true.

4? - limited_sum (3,2,15).
false.

5? - limited_sum (3,4,7).
false.

Вы спрашиваете:

Могу ли я избежать определения отдельных предикатов для каждого номера?

да, вы можете определить вместо

allowed_input(A):- A < 4, A > 0.