Что на практике означает нереляционный для core.logic?

Пытаясь понять core.logic через API-документы, я сталкиваюсь с нереляционными целями и реляционными целями. Я понятия не имею, что это означает на практике и почему важно аннотировать цели, если они реляционные или нет.

Можете ли вы объяснить на примере, как цели используются по-разному в зависимости от того, являются ли они реляционными или нет?

1 ответ

Решение

Чтобы объяснить, что означает нереляционный, нам нужно вернуться к тому, что relational средства.

Если вы рассматриваете чистые функции в функциональном программировании, они всегда возвращают одно значение, и для одинаковых входных аргументов возвращается одно и то же выходное значение.

Скажем, например:

 f(x) = x + 2

Эта функция всегда возвращает 5 для входного значения 3,

Но есть много ситуаций, когда функции неуместны, как квадратный корень, который имеет 2 результата.

 sqrt(4) => 2 and -2

Или разделите число на ноль, без результатов

Рассматривая отношение как обобщенную функцию, вы получаете:

  • Любое количество результатов (ноль или более)
  • Недетерминированный
  • аргументы in / out могут быть разными для каждого вызова
  • Отношения возвращают истину, если отношение истинно, и ложь в противном случае.

Чтобы преобразовать функцию в отношение, мы устанавливаем результат как новый параметр:

(cons 1 [2]) => [1 2]

(conso 1 [2] [1 2]) => true

Но сейчас conso может использоваться как генератор, если один аргумент является переменной:

 (run 1 [x]
    (conso 1 [2] x)) => ([1 2])

 (run 1 [x]
    (conso 1 x [1 2])) => ([2])

В логическом программировании объединение отвечает на вопрос: как должен выглядеть мир, чтобы это отношение было удовлетворено?

non-relational оператор или функция - это оператор, который работает не как отношение, а как простая функция, поэтому объединение, принимающее любой параметр в качестве переменной, невозможно.

Это произошло, например, с такими операторами, как > а также < до CLP над конечными доменами был введен в пространство имен clojure.core.logic.fd,

Многие концепции здесь вы можете найти в этом выступлении Амвросий Бонньер-сержант.

Другие вопросы по тегам