Қазақстан Республикасының Ғылым және Жоғары Білім министрлігі



Дата26.12.2023
өлшемі95.35 Kb.
#488076
түріПрограмма
Зертханалық жұмыс 6


Қазақстан Республикасының Ғылым және Жоғары Білім министрлігі
М.Әуезов атындағы Оңтүстік қазақстан Университеті
«Есептеу техникасы және бағдарламалық қамтамасыз ету" кафедрасы

Зертханалық жұмыс №6



Орындаған: Жора Еламан
Қабылдаған: Баймұсаева А.
Топ: ИП-21-6к2

Шымкент 2023
Рекурсивті құрылымдарды өңдеу

Жұмыстың мақсаты:
Prolog ортасында қолданбалы программаларды жасауды үйрену
Аппараттық және программалық құралдар
Windows (ХР/7/8) операциялық жүйе үшін жеткілікті параметрлері бар дербес компьютер, Turbo Prolog2.0 немесе VisualProlog5.0 бағдарламалау ортасы.

Қысқаша теориялық мәліметтер

Тізім – элементтердің реттелген жиыны. Прологта тізім тік жақшада жазылады және басы (head- голова) мен соңы (tail- хвост) дан тұрады:


Кесте 1 - Тізімдер мысалдары

Тізім

Тип

Басы

Соңы

[3, 4, 5, 6, 7]

Integer

3

[4, 5, 6, 7]

[“wo3”, “ni3”, “ta1”]

String

“wo3”

[“ni3”, “ta1”]

[4]

Integer

4

[]

[3.4, 5.6, 2.3]

Real

3.4

[5.6, 2.3]

Егер сіз [X|Xs] шаблонын [3.4, 5.6, 2.3] тізіміне қарастырсаңыз, нәтижесінде X=3.4 және Xs=[5.6, 2.3], яғни X тізім басына, ал Xs тізім соңына сәйкес келетіні анықталады.


Әрине [X|Xs] шабылонындағы X және Xs айнымалыларынан басқа да жұптарды қолдануға болады. Сонымен [A|B], [X|L], [Head|Tail], [First|Rest] және [P|Q] шаблондары эквивалентті болып келеді. [X|Xs] шабылонына сәйкес тағы бірнеше мысал:

Өзіңіз көріп тұрғандай [X|Xs] шабылон құрамына кем деген де бір элемент кіретін тізімге жатады. Құрамында кем дегенде екі элемент кіретін тізімге жататын шаблон:




Орындау реті

Мысал 1. Тізім элеиенттерін бейнелеу программасы:
DOMAINS
List1 = integer*
List2 = symbol*
PREDICATES
name [List1]
score [List2]
CLАUSES
name ["Иванов","Сидоров","Петров"].
score [1,2,3,4].
GOAL
Name [X],
Name [ _, Y, _ ],
Score [Z, _ , F, _ ], write(X,” ”,Y,” ”,Z,” ”,F)

Мысал 2. Тізім элеиенттерін баспаға шығару программасы:
DOMAINS
List1=integer*
List2=symbol*
PREDICATES
Print _ list (List1)
Print _ list (List2)
CLAUSES
Print _ list ([ ]).
Print _ list ([Head | Tail] ):-write (Head), nl,
Print _ list (Tail).
GOAL
Print _ list ( [1,2,3,4] )

Мысал 3. Екі тізімдің көбейтіндісінің соммасын анықтау:
DOMAINS
Vector=integer*
PREDICATES
prod(Vector,Vector,Vector)
CLAUSES
prod([ ],[ ],0).
prod([X|Xs],[Y|Ys],S):-prod(Xs,Ys,Sp), S=X*Y+Sp.
GOAL
prod([1,2,3],[7,8,9],Res), write(“Res=”,Res)

Мысал 4. Тізім элементінің индексін анықтау:
DOMAINS
L=integer*
X=integer
PREDICATES
poluch(L,X,X)
CLAUSES
poluch([X|Y],1,X).
poluch([W|Y],N,X):-M=N-1,poluch(Y,M,X).
GOAL
poluch([1,2,3,4],3,X),write(X)

Мысал 5. Тізімнің ең үлкен элементін анықтау:
DOMAINS
L=integer*
X=integer
PREDICATES
max(L,X)
CLAUSES
max([X],X).
max([X|Y],X):-max(Y,W), X>W,!.
max([X|Y],W):-max(Y,W).
GOAL
max([1,2,10,-4],X), write(X)


Мысал 3. Екі тізімдің көбейтіндісінің соммасын анықтау:

Мысал 2. Тізім элеиенттерін баспаға шығару программасы:

Мысал 4. Тізім элементінің индексін анықтау:

Мысал 5. Тізімнің ең үлкен элементін анықтау:


Достарыңызбен бөлісу:




©dereksiz.org 2024
әкімшілігінің қараңыз

    Басты бет