Когда мой друг начал учить Пролог в школе, я высмеивал его за то, что он выучил бесполезный язык. Тем не менее, он показал мне кое-что, чего я даже не знал; Я хочу знать, откуда эта техника.
Техника такова:
permutation(List) :-
isAMember(X, List),
deleteFirstElement(X, List, Substring),
% and so on
В этом коде isAMember(X, List)
- это функция, которая возвращает true, если X
находится в List
. Однако до этого момента X
не определен как переменная - , поэтому программа будет порождать кучу новых потоков, по одному для каждого возможного значения X
, что делает isAMember(X, List)
true, и продолжить оттуда.
Это позволяет нам создавать многопоточный алгоритм самым простым и элегантным способом, который я когда-либо мог себе представить.
Итак, мой вопрос: Является ли это специфичным для Пролога или функцией всех логических и / или функциональных языков? Кроме того, где я могу изучить более удивительные методы многопоточности, подобные этой, - это, безусловно, будущее программирования.