courses:knowledge_base_and_expert_system:lab3

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
courses:knowledge_base_and_expert_system:lab3 [2019/10/02 09:42]
andrey.suchkov [Лабораторная работа №3: Рекурсивные структуры данных. Списки]
courses:knowledge_base_and_expert_system:lab3 [2022/12/10 09:08] (current)
Line 1: Line 1:
 ====== Лабораторная работа №3: Рекурсивные структуры данных (списки) ====== ====== Лабораторная работа №3: Рекурсивные структуры данных (списки) ======
 ===== Цель работы ===== ===== Цель работы =====
 +Изучение и исследование рекурсивных структур данных в языке Visual Prolog на примере списков.
 ===== Основные теоретические положения ===== ===== Основные теоретические положения =====
 Пролог позволяет определить и использовать рекурсивные типы данных. Примерами рекурсивных типов данных служат списки и деревья. Список -- это объект данных,​ содержащий конечное число других объектов (элементов списка). Список,​ содержащий числа 1, 2 и 3, записывается следующим образом:​ ''​[1,​ 2, 3]''​. Пролог позволяет определить и использовать рекурсивные типы данных. Примерами рекурсивных типов данных служат списки и деревья. Список -- это объект данных,​ содержащий конечное число других объектов (элементов списка). Список,​ содержащий числа 1, 2 и 3, записывается следующим образом:​ ''​[1,​ 2, 3]''​.
Line 21: Line 22:
 integerlist=integer* integerlist=integer*
 predicates predicates
-printlist (integerlist)+printlist(integerlist)
 clauses clauses
-printlist ([]):- !.  % Для пустого списка ничего не делать +printlist([]) :- !.  % Для пустого списка ничего не делать 
-printlist ([H|T]):- write (H), nl, printlist (T).  % Для непустого списка  +printlist([H|T]) :- write(H), nl, printlist(T). ​ % Для непустого списка  
-                                                   ​% отделить голову,​ +                                                 ​% отделить голову,​ 
-                                                   ​% вывести ее, +                                                 ​% вывести ее, 
-                                                   ​% продолжить вывод для +                                                 ​% продолжить вывод для 
-                                                   ​% хвоста списка+                                                 ​% хвоста списка
 </​code>​ </​code>​
  
Line 38: Line 39:
 intlist=integer* intlist=integer*
 predicates predicates
-inverting (intlist, intlist) +inverting(intlist,​ intlist) 
-processing (integer, integer)+processing(integer,​ integer)
 clauses clauses
 % обработка пустого списка дает, в результате,​ тоже пустой список % обработка пустого списка дает, в результате,​ тоже пустой список
-inverting ([ ], [ ]):- !.+inverting([ ], [ ]) :- !.
 % если список непустой,​ отделить голову,​ обработать ее, % если список непустой,​ отделить голову,​ обработать ее,
 % и добавить в качестве головы списка-результата % и добавить в качестве головы списка-результата
-inverting ([H | T], [Inv_H | Inv_T]):-  +inverting([H | T], [Inv_H | Inv_T]):-  
-processing (H, Inv_H), inverting (T, Inv_T).+processing(H,​ Inv_H), inverting(T,​ Inv_T).
 % предикат processing выполняет действия по обработке элемента списка в % предикат processing выполняет действия по обработке элемента списка в
 % зависимости от его знака, предикат имеет два предложения, ​ % зависимости от его знака, предикат имеет два предложения, ​
 % так как нужно рассмотреть два варианта:​ ненулевое и нулевое значения % так как нужно рассмотреть два варианта:​ ненулевое и нулевое значения
-processing (0, 0):- !. +processing(0,​ 0) :- !. 
-processing (H, Inv_H):- Inv_H=-H.+processing(H,​ Inv_H) :- Inv_H=-H.
 goal goal
-inverting ([-2, -1, 0, 1, 2], Inv_List), write("​Inv_List=",​ Inv_List).+inverting([-2,​ -1, 0, 1, 2], Inv_List), write("​Inv_List=",​ Inv_List).
 </​code>​ </​code>​
 Результат работы программы:​ Результат работы программы:​
courses/knowledge_base_and_expert_system/lab3.1570009358.txt.gz · Last modified: 2022/12/10 09:08 (external edit)