Я знаю, что Prolog (программирование в логике) относится к возврату true и false, а функция - это что-то, что возвращает что-либо из списков, чисел в логические значения. Первоначально это не кажется, что Пролог имеет понятие функций, но вместо этого полагается на объединение, но вы можете сделать такие вещи, как:Определяющая (математическая) функция в Prolog
?- X is log(42).
X = 3.7376696182833684.
Таким образом, кажется, что существуют функции? Или это действительно просто какой-то синтаксический сахар, скрывающий часть объединения?
И если это действительно просто синтаксический сахар, то как бы я пошел, если бы хотел определить математическую «функцию», такую как log2?
Конечно, я могу использовать объединение:
log2(X,Result) :- Result is log(X)/log(2).
Но сказать, что я хочу использовать «стиль функции синтаксического сахара», так что я могу написать:
?- X is log2(8).
X = 3.0.
Как я могу это сделать в Прологе ?
Существует устаревшая директива 'arithmetic_function', которая будет делать то, что вы хотите. Предполагая, что существует предикат 'log2/2', директива': - arithmetic_function (log2/1) .' сделает ваш второй образец работы. Я не уверен, почему он устарел, но, похоже, все еще работает в 6.2.6. –
Я тоже задавался вопросом об этом устаревании, о чем спросить Яна У. Подход Деннис М. любит брать с Амзи! Prolog должен определить альтернативу «is» (например, 'iz/2' с синтаксисом infix) и построить правила, которые оценивают любые дополнительные функции. – hardmath