Для того чтобы объяснить, что означает не относящееся к делу отношение, нам нужно пересмотреть, что означает relational
.
Если вы рассматриваете чистые функции в функциональном программировании, они всегда возвращают одно значение, и для тех же входных аргументов возвращается одно и то же выходное значение.
Скажет, например:
f(x) = x + 2
Эта функция всегда возвращает 5
для ввода значения 3
.
Но есть много ситуаций, когда функции не подходят, как квадратный корень, который имеет 2 результата.
sqrt(4) => 2 and -2
Или разделить число на ноль, без результатов
Проводы отношение как обобщенной функции, то есть:
- Любое количество результатов (ноль или более)
- Не детерминированные
- аргументы ввода/вывода могут быть разными для каждого вызова
- Отношения retu rn true если отношение истинно и false в противном случае.
Для того, чтобы преобразовать функцию в отношении мы устанавливаем результат как новый параметр:
(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])
В логическом программировании объединение отвечает на вопрос: Какой мир должен выглядеть, если это отношение будет удовлетворено?
Оператор или функция A non-relational
является оператором, который не работает как отношение, а как простая функция, поэтому объединение любого параметра как переменной невозможно.
Это произошло, например, с операторами, такими как >
и <
до CLP
над конечными доменами было введено в пространстве имен clojure.core.logic.fd
.
Многие из концепций здесь вы найдете в this talk от Ambrose Bonnaire-Sergeant.
Не могли бы вы привести пример того, почему conda и condu не являются реляционными, но conde? – user3139545
'conde' исследует все ветви,' conda' работает как оператор, вырезанный прологом и заканчивающийся при обнаружении первого решения. Поэтому 'conda' не находит всех результатов, удовлетворяющих соотношению, но только первого. –
Так что из 4 пунктов, которые вы указали в answere, это то, что делает conda не отношением? – user3139545