Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






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.

 






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.