Есепті шешу мысалдары
Лисп тілінде функцияны шақыру үшін де, өрнектерді жазу үшін де бірқалыптағы жазбаның префиксттік түрі қабылданған. Бұл түрде функция аты немесе оның іс-әрекеті және оның аргументтері жақша ішіне жазылады: (f x), (g x y), (h x (g y z)) т.б.с.с.
Арифметикалық амалдар: (+ сандар) – сандарды қосу, (- сан сандар) – сандарды саннан алу (* көбейту) – сандарды көбейту т.б.с.с.
_(+ 5 7 4) 16
_(- 10 3 4 1) 2
_(/ 15 3) 5
Сандарды салыстыру: (=сан сандар) тең (барлығы) (<сан сандар) аз (барлығы үшін) (>сан сандар) көп (барлығы үшін) т.б.с.с.
Сандық предикаттар: (ZEROP сан) нөлге тексеру (MINUSP сан) терістікке тексеру т.б.с.с.
Логикалық әрекеттер: (NOT объект) логикалық терістеу (AND (формы)) логикалық ЖӘНЕ (OR (формы)) логикалық НЕМЕСЕ
_(AND (ATOM NIL) (NULL NIL) (EQ NIL NIL)) T
_( NOT (NULL NIL)) NIL
Бұдан басқа да көптеген пайдалы функциялар түрлері бар. Солардың тізімдермен жұмыс істейтін кейбір түрлерін қарастырайық.
1 Мысал. Екі тізім берілген. Осы екі тізімнің көбейтіндісінің нәтижесін алу керек. Лисп тіліндегі программа келесі түрдегідей болады:
(terpri)
(terpri)
(terpri)
(terpri)
(defun proizvedenie (spisok2 spisok1)
(cond ((null spisok1) 0)
(T (prince (* (car spisok2) (car spisok1))) (prince “ ”)
(proizvedenie (cdr spisok2) (cdr spisok1)))))
(princ “Введите списки”)
(terpri)
(setq a (read))
(setq b (read))
(setq c () )
(terpri)
(princ “Көбейту нәтижесіндегі тізім”)
(terpri)
(proizvedenie a b)
(terpri)
(princ “Соңы!!!”)
2 Мысал. Екі цифр берілген. Осы екі цифрды қосындысын алу керек. Лисп тіліндегі программа келесі түрдегідей болады:
(defun sum (N)
(cond ((=N 1) 1)
(T (+ N( sum (-N 1))))))
3 Мысал. Тізім берілген. Осы тізім элементтерінің қосындысын алу керек. Лисп тіліндегі программа келесі түрдегідей болады:
(defun sl (L)
(cond (( Null L) 0)
(T( + (car L))
(sl(cdr L))))))
4. Мысал. Сан берілген. Осы санның факториалын алу керек. Лисп тіліндегі программа келесі түрдегідей болады:
(defun fact (N)
(cond ((= N 1) 1)
(T (* N(fact(-N 1))))))
5. Мысал. Екі тізім берілген. Осы екі тізімнің бір бірімен алмасуының тізім түріндегі нәтижесін алу керек. Лисп тіліндегі программа келесі түрдегідей:
(defun sher (x y)
(cond ((Null x) y)
(T (cons (car x)
(sher y(cdr x))))))
Достарыңызбен бөлісу: |