Какие проблемы решает выбор карри?

Я знаком с тем, какой выбор оператора ((?)), принимает два аргумента и соответствует им обоим. Мы могли бы определить это следующим образом:

a?_=a
_?b=b

Это может быть использовано для введения недетерминизма между двумя значениями. Однако, что я не понимаю, почему мы хотели бы сделать это.

Что может быть примером проблемы, которая может быть решена с помощью (?)?

1 ответ

Одним примером, который обычно используется для мотивации недетерминизма, является функция, которая вычисляет все перестановки списка.

insert e []     = [e]
insert e (x:xs) = (e : x : xs) ? (x : insert e xs)

perm []     = []
perm (x:xs) = insert x (perm xs)

Приятно то, что вам не нужно указывать, как вы хотите перечислять все списки, алгоритм поиска, который лежит в основе логического языка программирования, такого как Curry (по умолчанию это поиск в глубину), сделает всю работу за вас. Вы просто указываете, как должен выглядеть список в вашем результате.

Надеюсь, вы найдете более реалистичные примеры в следующих статьях.

Новые шаблоны функциональной логики
Шаблоны функциональной логики

Изменить: Поскольку я недавно опубликовал работу по этой теме, я хочу добавить приложение вероятностного программирования. В статье мы показываем, что использование недетерминизма для моделирования вероятностных значений может иметь преимущества для основанных на списках подходов в отношении сокращения пространства поиска. Точнее говоря, когда мы выполняем запрос по вероятностным значениям, то есть фильтруем распределение на основе предиката, недетерминизм ведет себя менее строго, чем подходы на основе списка, и может сократить пространство поиска.

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