Пәндердің оқу-әдістемелік кешенінің тізімдемесі


Төмендегі тапсырмаларды орындау



бет76/85
Дата11.10.2023
өлшемі2.35 Mb.
#480347
1   ...   72   73   74   75   76   77   78   79   ...   85
Сараптаушы жүйелер

Төмендегі тапсырмаларды орындау:



  1. Бағдарлама білімдер базасы

  2. Білімдерді ұсыну

3. Қолданушымен интерфейс жүйесі


СӨЖ орындау барысында төмендегі әдебиеттерді пайдалану:



  1. Р. Акофф, Ф. Эмери. О целеустремленных системах. – М.:Советское радио, 1974г.

  2. М. Арбиб. Метафорический мозг. – М.:Мир, 1976г.

  3. В.И.Василев. Распознавающие системы. Справочник. – Киев, Наукова думка, 1983г.

  4. А.Н. Горбань, Д.А. Россиев. Нейронные сети на персональном компьютере. –Новосибирск, Наука, 1996.

  5. Д.Дюбуа, А.Прад Теория возможности. Приложение қ представлению знаний в информатике. –М.: Радио и связь, 1990.

  6. Л.Заде. Понятие о лингвистической переменной и его применение қ принятию решений. –М.:Мир, 1976.

  7. Интеллектуализация ЭВМ - // В уч. Пос. Преспективы развития вычислительной техники в 11 кн. Кн. 2. –М.: высшая школа, 1989..

  8. Искусственный интеллект. Применение в интегрированных производственных системах. Под. Ред. Э. Кьюсиака. –М.: Машиностроение, 1991.

  9. Искусственный интеллект. Справочник вв 3-х томах. –М.: Радио и связь, 1990.

  10. Е. Ю. Кадрашина, А.В. Литвинцева, Д.А.Поспелов. Представление знаний о времени и пространстве в интеллектуальных системах. –М.: Наука, 1989.

4 СӨЖ


Тақырыбы: Тізімдермен жұмыс істеу


Мақсаты: тізімдермен жұмыс істеуге арналған функцияларды көтсету, рекурсияны қолданып тізімдерді өңдеу әдістері, тізімдермен жұмыс істеу үшін функцияларды жазу.


Есептің қойылуы


Тізімдер Лисп тіліндегі берілгендердің негізгі түрі болып саналады. Тізім деп дөңгелек жақшаға алынған тізім элементтерінің шектеулі тізбегін түсінеміз. Тізім элементі не атом не, тізім болуы мүмкін. Тізімнің бірінші элементі тізім басы деп, ал қалған бөлігі (бірінші элементтен басқа) тізім соңы деп аталады. Атом деп Лисп тілінің екі шектеуіштерінің ортасында орналасқан сандар мен әріптердің кез-келген тізбегі аталады. Литерлік атом әрқашан символ деп аталады. Лисп тілінде АҚИҚАТ және ЖАЛҒАН түсінктерінің ролін атқаратын екі стандартты атом Т және NIL анықталған. Нақты айтқанда Лиспте сандар да атом болып табылады. Тізім мысалы: (А(В(С))). Бұл тізім екі элементтен тұрады: А атомынан және (В(С) тізімінен, ол өз кезегінде В атомы және (С) тізімінен тұрады. Бос тізім бұл бір де бір элементі жоқ тізім. Ол () белгісімен немесе NIL атомымен белгіленеді. Лиспте бос тізім атомдарға жатады.


Тізім бағыттауыштық құрылым. Тілдің негізгі бағыттауыштық құрылымы жүптың бірінші және екінші элементтеріне бағыттауыштардан тұратын нүктелік жұп. Мысалы, А және В атомдарына бағыттауышы бар нүктелік жұп символдық көрінісі (А.В) түрінде көрсетіледі. Егер нүктелік жұп бірінші бағыттауышпен А атомына, ал екіншісімен басқа нүктелік жұпқа (В.С) бағытталса, онда ол символдық түрде (А.(В.С)).
(А В С D) тізімі символдық көріністе келесідей: (А.(В.(С.(D.(NIL))))).
S-өрнек деп Лиспте не атомды, не не тізімді түсінеміз. Лисп тілінде синтаксистік көзқарас бойынша бағдарлама мен берілгендер арасында айырмашылық жоқ. Лиспте кез-келген S-өрнекті бағдарлама деп түсінуге болады. S-өрнектің түсіндіруін EVAL функциясы орындайды. Бірақ, семантикалық ойларға байланысты кез-келген S-өрнек дұрыс түсіндіріле бермейді. S-өрнекті түсіндірудің кейбір жалпы ережелерін көрсетуге болады:

  1. Егер S-өрнек сан немесе Т немесе NIL атом болса, онда EVAL функциясы бұл S-өрнекті өзгеріссіз қайтарады.

  2. Егер S-өрнек литерлік атом болса, онда EVAL функциясы осы атомға тағайындалған соңғы мәнді қайтарады, қарсы жағдайда қате жөнінде хабар шығады.

  3. Егер S-өрнек (f arg1 arg2 … argN) түріндегі тізім болса, онда EVAL функциясы оны келесі түрде түсіндіруге тырысады: тізімнің бірінші элементі аргументтері ретінде қалған элементтері arg1, arg2, …,argN алынып орындалуға тиіс функцияның аты ретінде түсіндіріледі. Жетістікті жағдайда EVAL функциясы f функциясының орындалуының нәтижесі болатын S-өрнек қайтарады.

Кей жағдайда өрнектің мәнін есептеудің қажеті жоқ, өрнектің өзі қажет. Өрнектің мәнінің есептелуін тоқтату үшін сол өрнектің алдына апостроф (‘) қою керек. Өрнек алдындағы апостроф – бұл лисп формасының (QUOTE<өрнек>) қысқартылғаны, мұнда QUOTE есептелінбеген аргумент <өрнек> қайтаратын арнайы функция.

  • ‘(+ 2 3)

(+ 2 3)

  • (+ 2 3)

Мұнда және төменде мысалдарда “>” таңбасы xlisp түсіндіргішінің шақырылуын білдіреді. Бұл таңбадан соң түсіндірілетін өрнек жазылады. Түсіндіргіштің жауабы келесі қатарда көрсетіледі.
S-өрнекті өңдеудің базистік функциялары: CAR, CDR, CONS, ATOM және EQ.
CAR функциясының шақырылуы: (CAR <тізім>). CAR функциясы мән ретінде тізім-аргументтің бірінші (бас) элементті қайтарады. Нәтиже типі S-өрнек.

  • (CAR ‘((1 2) 3))

(1 2)
CDR функциясының шақырылуы: (CDR <тізім>). CDR функциясы мән ретінде тізім-аргументтің соңын қайтарады. Нәтиже типі – тізім.

  • (CDR ‘((1 2) 3))

(3)

  • (CDR ‘A)

NIL
CAR және CDR функциялары кез-келген тізімнің кез-келген элементіне жетуге көмек береді. Мысалы, тізімнің екінші элементіне жету үшін келесі S-өрнекті қолданамыз: (CAR(CDR <тізім>)).

  • (CAR(CDR ‘(1 2 3 4)))

2
CAR және CDR функцияларын композициялау үшін арнайы белгілеулер енгізілген. Xlisp-те ол – CxxR, CxxxR, CxxxxR, мүнда x – A немесе D әрпі. Мысалы, (CADR X) шақырылуы (CAR(CDR X)) шақырылуына эквивалентті.

  • (CADR ‘(1 2 3 4))

2
CONS функциясы (construct) аргумент ретінде берілген басы (S-өрнек) және соңынан (тізім) жаңа тізім құрады:
(CONS <тізім басы>< тізім соңы>)

  • (CONS ‘A ‘(B C))

(A B C)

  • (CONS ‘(A B) ‘(C D))

((A B) C D)
АТОМ предикаты аргумент атом ба жоқ па тексереді. Кез-келген S-өрнек аргумент болуы мүмкін. Аргумент мәні атом болса, предикат мәні Т, ал аргумент мәні атом болмаса предикат мәні NIL болады.

  • (ATOM ‘X)

T
EQ предикаты екі символдың сәйкестігін тексереді. Егер символдар сәйкес болса EQ предикаты Т мәнін қабылдайды, ал аргументтер символ емес болған жағдайды қосқанда басқа жағдайлардың барлығында NIL мәнін қабылдайды.

  • (EQ (CAR ‘(A A))(CAR ‘(A B C D)))

T
EQ-мен салыстырған жалпы болып саналатын EQL предикаты. Ол қосымша бір типті сандар мен қатарларды салыстыруға мүмкіндік береді. Екі тізімнің бірдейлігін тексеруге мүмкіндік беретін, EQL предикатының жалпыланған түрі EQUAL предикаты:

  • (EQUAL ‘(X Y Z) ‘(X Y Z))

T
Tізімнің физикалық құрылымын өзгертетін негізгі функциялар: RPLACA (replace CAR) және RPLACD (replace CDR):
(RPLACA <тізім><өрнек>)
(RPLACD <тізім><өрнек>)
RPLACA функциясы тізімнің бірінші элементін, ал RPLACD функциясы тізім қалдығын өрнек мәнімен алмастырады. Екі функция да тізімді өзгертілгеннен соң қайтарады.
Лиспте шартты өрнектер COND функциясын қолдану арқылы құрылады. Шартты өрнек құрылымы келесідей:
(COND (p1 e1) (p2 e2) …(pN eN))
мұндағы p1,p2,…,pN – предикаттар, ал e1,e2,…,eN – еркін нәтижелеуші өрнектер.
COND функциясының мәні келесі жолмен анықталады:

  1. АҚИҚАТ деп түсіндірілетін мәні NIL-ден өзгеше өрнек кездескенге дейін pi өрнектерінің мәндері солдан оңға қарай кезектестіре есептелінеді.

  2. Осы предикатқа сәйкес нәтижелеуші өрнек есептелінеді және алынған мән COND функциясының мәні ретінде қайтарылады.

  3. Егер ақиқат предикат жоқ болса, COND функциясының мәні NIL болады.

Шартты өрнекте нәтижелеуші өрнек pi жоқ болуы мүмкін немесе оның орнында жиі өрнектер тізбегі болуы мүмкін:
(COND (p1 e11)…(pi)…(pk ek2…ekn)…).
Егер шартқа нәтижелеуші өрнек сәйкестірілмесе, предикаттың ақиқат жағдайында COND нәтижесі ретінде предикаттың нәтижесінің өзі беріледі. Егер шартқа бірнеше өрнек сәйкес келсе, онда оның ақиқат жағдайында өрнектер солдан оңға қарай кезектесе есептелінеді және COND функциясының нәтижесі кезектің соңғы өрнегінің нәтижесі болады.
Лисп тілінде символдар мән қабылдай алады. Басында симолдарда қандай да бір мән болмайды. Символдарға мән SET, SETQ, SETF псевдофункциялары көмегімен тағайындалады (әйтпегенде, кері эффектілі функциялары көмегімен, мұнда негізгі әрекет осы кері эффект болып саналады). SETQ функциясының шақырылуы келесі: (SETQ ), мұнда - символ (есептелінбейді), - символдың жаңа мәнін сипаттайтын өрнек. Функция символ мәнін қайтарады. SET функциясы SETQ функциясына ұқсас, бірақ кейінгіден айырмашылығы оның аргументі есептелінбейді.

  • (SETQ A ‘B)

B

  • (SET A 7)

7

  • B

7
Лисп тілінде кез-келген символ “қасиеттер тізімі” деп аталатын арнайы біріктірілген тізімге ие болуы мүмкін. Мұндай тізімнің құрылымы: (p1 v1 p2 v2 …pn vn), мұнда p1, p2, …, pn – қасиеттердің атын білдіретін атомдар (кейде индикаторлар деп аталады), v1, v2,…,vn – осы қасиеттер мәндеріне сәйкес S-өрнек. Символмен байланысты қасиеттің мәнін GET функциясының көмегімен анықтауға болады: (GET <символ><қасиет>).
Жаңа қасиетті тағайындау немесе ағымдағы қасиеттің мәнін өзгерту PUTPROP псевдофункциясы арқылы жүзеге асырылады: (PUTPROP <символ><қасиет><мән>).
Қасиетті және оның мәнін жою REMPROP псевдофункциясы арқылы іске асады: (REMPROP <символ><қасиет>).
Лиспте ассоциативті тізім (а-тізім) деп ((k1.v1)(k2.v2)…(kn.vn)) түріндегі нүктелік жұп аталады. Жұптың бірінші элементі кілт, ал екіншісі кілтпен байланысты берілгендер деп аталады. ASSOC функциясы а-тізімнен кілтке сәйкес жұпты іздейді: (ASSOC <кілт><а-тізім>). Іздеу тізімнің бірінші жұбынан соңғысына қарай жүргізіледі. ACONS функциясы тізімнің басына жаңа жұп қосады.
Лисп тілінде жаңа функцияны DEFUN функциясы көмегімен анықтауға болады:
(DEFUN ()), мұнда - анықталатын функцияның аты, - функцияның формалық аргументтерін көрсету үшін қолданылатын атомдар, - функцияның денесін құрайтын кез-келген S-өрнектер. Функция символ қайтарады. Аты қойылмаған функцияларды анықтау үшін Лиспте LAMBDA-өрнектер қолданылады.
Функцияның шақырылулары мен анықталуларын түсіндіргішке енгізу түсіндіргіштің командалық қатарынан да файлдан да жүзеге асырыла береді. Кейінгісіне LOAD жүйелік функциясы қарастырылған: (LOAD <файл аты>). Файлдан оқылатын өрнектер қолданушымен енгізілген секілді болып орындалады. xlisp-те <файл аты> - файлдың қатарлық аты немесе символ (қатарлық мәнімен). Файл аты бұл MS DOS құралдарымен анықталған файлға баратын жол, жолда “\” символы екі еселенеді. Егер файл жақсы орнатылған болса LOAD функциясы Т қайтарады, ал керісінше болсаNIL:

  • (LOAD “c:\\xlisp\\trace.lsp”)

T
Егер функцияның анықталуында осы функцияның өзінің шақырылуы болса онда функция рекурсивті. Егер функцияның шақырылуы кейбір тармақта бір-ақ рет кездессе рекурсия қарапайым болады. Қарапайым рекурсияға процедуралық бағдарламалауды қәдімгі цикл сәйкес келеді. Бір-біріне енгізілген циклдарға сәйкес көп есе қайталанулар әдетте әр қайсысы қарапайым циклге сәйкес келетін екі және одан да көп функциялар көмегімен жүзеге асады. Рекурсиялық анықталуда шарттардың қайталануы болымды. Дұрыс қайталануды мүмкін оқиғаларды ескере отырып логикалық ойлау арқылы алуға болады. Шарттарды қайталауды орнатуда негізгі сәт бірінші болып аяқталу шарты тексеріледі, ал сонан соң есептелулердің жалғасуын талап ететін оқиғалар тексеріледі. Тексерудің жоқтығы, қате шарт немесе олардың қате тәртібі шексіз рекурсияға алып келуі мүмкін.
Рекурсияны пайдалануға мысал ретінде тізіммен ұсынылған екі жиынның қиылысуын іске асыратын функцияларды қарастырайық.
(defun belongs (elem list)
(cond ((null list) NIL)
((eq elem (car list)) T)
(T (belong elem (cdr list)))))
(defun intersect (list1 list2)
(cond ((null list2) NIL)
((belongs (car list2) list1)
(cons (car list2) intersect list1 (cdr list2))))
(T (intersect list1 (cdr list2)))))
Келтірілген (belongs) функциялардың біріншісі elem элементі list тізіміне жатады ма жоқ па анықтау үшін қолданылады. Егер жататын болса функция Т қайтарады, керісінше болса NIL. Осылайша, бұл функция предикат болып табылады.

  • (BELONGS ‘B ‘(A B C D))

T
belongs функциясының денесі үш тармақтан тұратын шартты сөйлемнен тұрады:

  1. Егер list тізімі бос болса (null предикатымен анықталады), онда NIL мәні қайтарылады. Берілген тізім ең басынан немесе тізімді тексеру аяқталғандықтан бос болуы мүмкін.

  2. Егер list тізімінің бірінші элементі ізделіп жатқан elem элементі болса, онда Т қайтарылады.

  3. Алдын аталған тұжырымдардың барлығы дұрыс емес: олай болғанда не элемент тізім соңында, не тізімге тіптен енбеген. Мәселені шешуді жалғастыру үшін дәл осы belongs предикатын тізім соңына қолданамыз. Осылайша, мәселе бұрынғысына ұштасады, бірақ бір қадам артық.

Екінші (intersect) функциясы list1 және list2 тізімдеріне бірдей енетін элементтерден тізім-нәтиже құрайды. Intersect функциясы үш тармақтан тұратын шартты сөйлемнен тұрады.

  1. Егер list2 тізімі бос болса, онда NIL қайтарылады.

  2. Егер list2 тізімінің бірінші элементі list1 тізіміне жататын болса, онда осы элемент нәтижелеуші тізімнің басы ретінде енгізіледі. Осы тізімнің соңы list1 тізімі мен list2 тізімінің соңының қиылысының нәтижесі ретінде құрылады.

  3. Алдыңғы шарттардың ешқайсысы дұрыс емес. Бұл жағдайда нәтижелеуші тізім list1 тізімі мен list2 тізімінің соңының қиылысуы нәтижесі болады.




  • (INTERSECT ‘(A B C D) ‘(X D E C))

(C D)
Лисп-бағдарламаны орындау үшін қадамдау құралдарын қолдану қажет. Xlisp-те қандай да бір функцияны қадамдау TRACE функциясының көмегімен іске асырылады: (TRACE <функция аты>).

  • (TRACE ‘INTERSECT)

TRACE
TRACE директивасын енгізгеннен соң түсіндіргіш функция атын және қадамдалушы функцияның әрбір шақырылуының аргументтер мәндерін және әр шақырылуда есептелу аяқталған соң алынған нәтижені баспаға шығарады. Қадамдауды өшіру формасы жағынан алдыңғыға ұқсас UNTRACE директивасы көмегімен жүзеге асырылады




Достарыңызбен бөлісу:
1   ...   72   73   74   75   76   77   78   79   ...   85




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

    Басты бет