Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
это система опирающаяся на логику предикатов и встроенные процедуры автоматического доказательства теорем
?- mul( _, 0+1+1, 0+1+1+1+1).add(0,X,X).
add(X+1,Y,Z+1):-add(X,Y,Z).
mul(0, _, 0).
mul(X+1, Y, Z):- add(Z1, Y, Z), mul(X, Y, Z1).
%кратность на 3
?- mul(_, 0+1+1+1, 0+1+1+1+1+1+1).
true.
%кратность на 2
?- mul(_, 0+1+1, 0+1+1+1+1+1+1).
true.
%и не кратность
?- mul(_, 0+1+1, 0+1+1+1+1+1).
false.Это меня подтолкнуло на такую мысль: а может абстрагируемся еще больше, и отбросим арифметические операции этого "интэграл"
Не совсем так, числа в кодировке Черча это как раз один из вариантов реализации натуральных чисел, так что уровень абстракции тут ниже. Type class это просто требования к типу — функция опирающаяся на такое требование будет работать с любым типом, в том числе и с числами Черча (хотя конечно натуральные числа у`же чем целые, которые описывает Integral)
?- fizz_buzz(N, fizz).Type class это не class, это класс типов — интересный вариант полиморфизма из функциональных языков когда протокол описывается отдельно от самого типа.
Что касается прямой и обратной задачи, prolog реализует поиск решения, описанного программой. Scala этого не делает — поиск нужно описать вместе с решением.
Logical FizzBuzz