Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
CLAUSES. length_of([_|T], L):- length_of(T, TailLength), L=TailLength+1.
length_of([], 0). length_of([_|T], L): - length_of(T, TailLength), L=TailLength+1.
Второе предложение: кардинально, [_|T] будет соответствовать любому непустому списку, связываяT с хвостовой частью списка. Значение головы незначительно. 2. Пропишите цель: length_of([1, 2, 3], L).
Данная цель будет соответствовать второму предложению, сT = [2, 3]. Следующий шаг должен вычислить длинуT. Когда это сделано, TailLength получит значение 2, и компьютер может тогда добавить 1 к этому и связатьL с 3. 3. Сравните результаты ответа (рис. 3): Рис. 3. Вывод длины списка
Другими словами, length_of вызывается рекурсивно. Эта цель соответствует второму предложению. Повторно, TailLength в цели не будет сталкиваться с TailLength в предложении, потому что каждое рекурсивное обращение предложения имеет его собственный набор переменных. Теперь проблема состоит в том, чтобы найти длину [3], которая будет 1 и затем добавлять 1 к ней, который получить длину [2, 3], которая будет 2. Аналогично, length_of вызовет себя рекурсивно снова, чтобы получить длину [3]. Хвост [3] - [], так что T связан с [], и проблема состоит в том, чтобы получить длину [], затем добавлять 1 к этому, давая длину [3]. На сей раз это просто. Цель length_of([], TailLength) соответствует первому предложению, связываяTailLength с 0. Так что теперь компьютер может добавить 1 к тому, что, дает длину [3], и возвращается к предложению запроса. Что, в свою очередь, добавит 1 снова, давая длину [2, 3], и возвратится к предложению, которое вызывало это. Оно добавит 1 снова, давая длину [1, 2, 3]. На следующей краткой иллюстрации мы будем суммировать запросы. Мы использовали приписки, чтобы указать, что переменные в различных предложениях или различных обращениях того же самого предложения являются отличными. length_of([1, 2, 3], L1). length_of([2, 3], L2). length_of([3], L3). length_of([], 0). L3 = 0+1 = 1. L2 = L3+1 = 2. L1 = L2+1 = 3.
|