Список1 Список2 Конкретизация
[X, Y, Z] [джону,нравится,рыба] X=джону Y= нравится Z = рыба
Переменная - это символ, используемый в разное время для обозначения различных объектов. Для определения области действия переменных используются кванторы. Термы рекурсивно определяются следующим образом: 1.константа есть терм; 2.переменная есть терм; Предикатный символ P (предикатная буква) используется для представления отношений между объектами в некоторой области. Если предикатный символ P имеет n аргументов, то P называется n-местным предикатным символом. Предикат - это логическая функция, принимающая только два значения - "истина" или "ложь". Предикаты являются атомарными формулами или атомами логики предикатов первого порядка.
Лямбда выражения — Это выражение, составленное из переменных, объединенных операциями применения и абстракции. Способы представления данных в языке Пролог * Базы данных в Прологе - (БД) понимается совокупность фактов. Если набор фактов задается на этапе разработки программы и не изменяется во время работы, то база данных является статической. Справочной информации. Все предикаты, описанные в разделе predicates, относятся к статической БД. Динамические БД позволяют отражать изменения данных. Все предикаты, описанные в разделе database, относятся к динамической БД. * Список как частный вид структуры - упорядоченная последовательность элементов, которая может иметь произвольную длину. Признак упорядоченный указывает, что порядок элементов в посл-ти является существенным и список [1,2,3] не эквивалентен списку [3,2,1]. Элементы списка: термы - константы, переменные, структуры Списки – это частный вид структуры(рекурсивной структурой данных.) Список - это либо пустой список, не содержащий не одного элемента, либо структура, имеющая два компонента: голову и хвост. Конец списка представляется как хвост, который является пустым списком. 8) Рекурсивные функции: разбор случаев, рекурсивные определения, выбор подфункций (Haskell). Рекурсия - это способ определять функции таким образом, что функция применяется в собственном определении. Многие понятия в математике даются рекурсивно. Рекурсия важна для Хаскеля, потому что в отличие от императивных языков, вы выполняете вычисления в Хаскеле, описывая некоторое понятие, а не указывая как его получить. Вот почему в языке нет циклов while и for, вместо этого мы зачастую должны использовать рекурсию, чтобы описать, что собой представляет та или иная сущность. Для начала реализуем функцию replicate. replicate берет целое число (Int) и некоторый элемент, и возвращает список, который содержит несколько повторений того же элемента. Например, replicate 3 5 вернет [5,5,5]. Функция reverse обращает список, выстраивая элементы в обратном порядке. Думаем о граничных условиях. Что бы придумать? Это... пустой список, конечно же! Если обратить пустой список, получим тот же пустой список. Так, так. Что на счет всего остального? Ну, можно сказать, что если разбить список на голову и хвост, то обращенный список - это обращенный хвост плюс голова списка в конце. reverse':: [a] -> [a] reverse' [] = [] reverse' (x:xs) = reverse' xs ++ [x] Далее, мы реализуем take. Эта функция берет определенное количество элементов из списка. Например, take 3 [5,4,3,2,1] вернет [5,4,3]. Если мы попытаемся получить ноль или менее элементов из списка, получим пустой список.
|