Я не настолько хорошо знаю Пролог, чтобы разобрать, что имелось в виду. Впрочем, реализованный в подобном стиле алгоритм сопоставления Рефала, наверное, тоже вряд ли будет выглядеть более понятно.
Я вчера потратил пару часов, чтобы разобраться в коде. Пролог - один из языков, которые невозможно понять, не разобрав реализацию. Тут делается сопоставление образцов попарно. Математики называют этот алгоритм унификацией.
no subject
Date: 2020-05-02 08:11 (UTC)no subject
Date: 2020-05-02 09:15 (UTC)Я вот тут отрефакторил слегка: https://gist.github.com/sergev/65683bcf9127f559077a52314261ec16
no subject
Date: 2020-05-02 09:18 (UTC)no subject
Date: 2020-05-02 12:36 (UTC)no subject
Date: 2020-05-02 15:53 (UTC)no subject
Date: 2020-05-02 18:27 (UTC)https://en.wikipedia.org/wiki/Unification_(computer_science)
В википедии чёрт ногу сломит, проще было код разобрать.
В первой части сравниваем шаблонпоследовательно с шаблонами
Здесь I, J, X, L, M, N - переменные с произвольным значением, как звёздочка в шелле.
Первое сравнение проходит удачно: I получает значение nil, а J = [1, 2, 3].
Второе сравнение обламывается на каком-то уровне.
no subject
Date: 2020-05-02 18:48 (UTC)С выделением памяти профессор обращается несколько фривольно.