Нейрондық желінің үйретілуі
Жұмыстың мақсаты: Функционалдарды жазу дағдысын қалыптастыру. Енгізу-шығару функцияларын оқып үйрену. Рекурсияны қолданатын ережелерді құруды үйрену.
Жұмысты орындау бойынша Әдістемелік ұсыныстар:
Функцияларды анықтау және есептеу Черчтің лямбда-есептеулеріне негізделген. Лисп тіліндегі лямбда-өрнек түрі мынандай болады
(LAMBDA (x1 x2 ... xn) fn)
LAMBDA таңбасы мынаны білдіреді: біз функция анықтамасын келтірдік. xi таңбалары анықтаудың формальды параметрлері болып есептеледі. Олар fn функциясының денесінде өз аргументтерін ұстайды. Форма құрамына кіретін параметрлерден құрылған тізімді лямбда-тізім деп атайды.
Кез келген форма функция денесі бола алады, оның мәнін Лисп интерпретаторы есептеп шығарады. _(lambda (x y) (+ x y))
Параметрлердің формальді түрде болуы мынаны білдіреді: оларды кез келген басқа таңбаларға ауыстыруға болады, ол функция анықтаған есептеулерге әсерін тигізбейді.
Лямбда-өрнек – ол нақты параметрлері немесе аргументтері жоқ есептеулер мен функция параметрлерін анықтау. Осындай функцияны кейбір аргументтерге қолдану үшін функция шақыруында лямбда-оанықтауды функция атының орнына қою керек:
(лямбда-өрнек а1 а2 ... аn)
Мұндағы ai – нақты параметрлерді беретін, әдеттегідей есептелетін формалар._((lambda (x y) (+ x y)) 1 2) 3
Лямбда-шақыруларды өзара және басқа да формалармен біріктіруге болады. Бір біріне енген лямбда-шақыруларды лямбда-өрнек денесіне де, нақты параметрлер орнына да қоюға болады.
_((lambda (x) ; Лямбда-шақыру денесі-
((lambda (y) (list x y)) ‘b)) ‘a) (a b) Лямбда-шақыру.
Функциялар шақыруларын толығымен лямбда-шақыру арқылы орындау тиімді емес. Өйткені шақырудағы өрнектерді қайта қайта орындау қажет болады. Бір функцияның әртүрлі шақыруларының айырмашылығы тек нақты параметрлерінде болады. Бұл қиындықты жеңу үшін лямбда-өрнекке ат қойып, оны пайдалануда тек атын ғана қолданса жеткілікті.
Жаңа функцияны анықтау және оған ат беру DEFUN функциясы көмегімен іске асады: (DEFUN аты лямбда-тізім денесі)
DEFUN таңбаны лямбда-өрнекпен біріктіреді. Бұл форманың мәні ретінде жаңа функцияның аты жүреді. Функцияға ат бергеннен кейін оны шақыру аты және параметрлері бойынша іске асады.
_(defun list1 (x y)
(cons x (cons y nil))) list1
_(list1 ‘c ‘n) (c n)
(eval <өрнегі>)
Функция өрнек нәтижесін <өрнегі> түрінде қайтарады, мұндағы <өрнегі> - Лисп тіліндегі кез келген өрнек. Мысалы:
(setq a 123)
(setq b 'a)
(eval 4.0) 4.000000
(eval (abs -10)) 10
(eval a) 123
(eval b) 123
READ оқитын функциясы өрнекті толығынан өңдейді. Функция шақыруы мына түрде іске асады
_(READ)
(Енгізілетін өрнек) ;пайдаланушы өрнегі
(ЕНГІЗУ ӨРНЕГІ) ; READ функциясының мәні
...
Функция өрнекті енгізуді күтіп тұрғанын көрсетпейді. Ол тек өрнекті оқиды да мән ретінде өрнектің өзін қайтарады, содан соң есептеулер жалғасады.
Егер оқылған өрнекті ары қарай пайдалану үшін сақтау керек болса, онда READ шақыруы бір форманың аргументі болуы керек, мысалы (SETQ), функциясын алсақ:
_(SETQ input (READ))
(+ 1 2) ;енгізілген өрнек
(+ 1 2) ;мәні
_input (+1 2)
Шығару функциясы. Шығару үшін бірнеше функция пайдаланылады: PRINT, PRIN1, PRINC.
PRINT функциясы. Бұл бір аргументі бар функция. Ол алдымен аргумент мәнін есептейді содан соң оны шығарады. PRINT функциясы аргументті шығарар алдында жаңа жолға өтеді, содан соң бос орынды шығарады.Осылайша шығару мәні ылғи жаңа жолда болады.
_(PRINT (+ 1 2))
3; шығару
3; мәні
PRINT псевдофункция болып табылады. Оның жанама эффектісі бар. Функция мәні ретінде оның аргументінің мәні жүреді, ал жанама эффектісі ретінде осы мәнді басып шығару болады.
PRIN1 және PRINC функциялары. Бұл функциялар PRINT функциясы сияқты жұмыс істейді, бірақ жаңа жолға өтпейді және бос орынды шығармайды:
(PRIN1 5) 55
(PRINC 4) 44
Екі функция да атомдар мен тізімдерден басқа деректердің басқа түрлерін де басып шығарады:
_(PRIN1 «CHG») «CHG»«CHG»
_(PRINC «tfd») tfd«tfd» ;тырнақшасыз шығару,
;нәтиже – аргумент мәні
PRINC функциясы көмегімен шығарудың жақсы түрлерін алуға болады. Ол PRIN1 сияқты қызмет атқарады, дегенмен деректердің кейбір түрін қарапайым формада шығара алады.
TERPRI функциясы. Бұл функция қатарды жасайды. TERPRI функциясының аргументтері жоқ сондықтан ол мән ретінде NIL қайтарады:
_(DEFUN out (x y)
(PRIN1 x) (PRINC y)
(TERPRI) (PRINC (LIST ‘x ‘y)) out
_(out 1 2) 12
(1 2)
Құрылымды өзгертетін есептеулер. Тізімдердің физикалық құрылымын өзгертетін негізгі функцияларға RPLACA және RPLACD жатады. Олар тізімдік ұяшықтардың CAR және CDR өрістерінің бұрынғы мәндерін өшіріп, оның орнына жаңа мәндерді жазады:
(RPLACA ұяшық өріс-мәні) ; CAR өрісі
(RPLACD ұяшық өріс-мәні) ; CDR өрісі
Бірінші аргумент есебінде тізімдік ұяшықтың көрсеткіші жүреді, екінші болып CAR немесе CDR өрістерінің жаңа мәндері жүреді. Екі функция да нәтиже ретінде өзгертілген тізімдік ұяшықтың көрсеткішін қайтарады:
_(SETQ a ‘(b c d)) (b c d)
_(RPLACA a ‘d) (d c d)
_(RPLACD a ‘(o n m)) (d o n m)
_a (d o n m)
Достарыңызбен бөлісу: |