|
На мові програмування Лісп написати функцію обчислення значення многочлена в точці за схемою Горнера.
; проверяет или obj пустой
(DEFUN NULL (obj)
(EQL obj NIL)
)
; value – «точка», значение параметра многочлена
; lst – список коефициентов
; рекурсивно считаем значение: умножаем на value и прибавляем очередной коефициент
(DEFUN GORNER (value lst)
((NULL (CDR lst)) (CAR lst))
(+ (* value (GORNER value (CDR lst))) (CAR lst))
)
Задача ШІ-3
На мові програмування Лісп написати функцію REVERSELIST – обертання списку з підсписками.
;проверяет или obj пустой
(DEFUN NULL (obj)
(EQL obj NIL)
)
;рекурсивно соединяет два списка
(DEFUN APPEND (lst1 lst2)
((NULL lst1) lst2)
((NULL lst2) lst1)
(CONS (CAR lst1) (APPEND (CDR lst1) lst2))
)
;рекурсивно реверсим список: реверсим хвост и аппендим голову
;если голова не атомарный елемент то при этом реверсим и голову
(DEFUN REVERSE_ALL (lst)
((NULL lst) NIL)
((ATOM (CAR lst))
(APPEND (REVERSE_ALL (CDR lst)) (CONS (CAR lst) NIL))
)
(APPEND (REVERSE_ALL (CDR lst)) (CONS (REVERSE_ALL (CAR lst)) NIL)))
Задача ШІ-4
На мові програмування Лісп написати функцію швидкого сортування для вхідного списку чисел.
(defun listLT (N L); возвращает список из элементов L, которые < N
(if (null L)
nil; если список пустой, возвращаем nil
(if (< (car L) N)
(cons (car L) (listLT N (cdr L))); включаем голову в результат
(listLT N (cdr L)); не включаем голову в результат
)
)
)
(defun listNLT (N L); возвращает список из элементов L, которые >= N
(if (null L)
nil; если список пустой, возвращаем nil
(if (> (car L) N)
(cons (car L) (listLT N (cdr L))); включаем голову в результат
(listLT N (cdr L)); не включаем голову в результат
)
)
)
(defun qsort(L)
(if (null L)
Nil
(append; встроенная функция, склеивающая списки
(qsort (listLT (car L) (cdr L)))
(cons (car L) nil); делаем элемент списком, для функции append
(qsort (listNLT (car L) (cdr L)))
)
)
)
Задача ШІ-5
На мові програмування Лісп написати функцію (PRNUM2 num), яка перетворює десяткове представлення числа num у двійкове.
(DEFUN NULL (obj)
(EQL obj NIL)
)
; апендит два списка
(DEFUN APPEND (lst1 lst2)
((NULL lst1) lst2)
(CONS (CAR lst1) (APPEND (CDR lst1) lst2))
)
;реверсит список
(DEFUN REVERSE (lst)
((NULL lst) NIL)
(APPEND (REVERSE (CDR lst)) (CONS (CAR lst) NIL))
)
;по числовому значению строит список двоичного представления начиная с меньших разрядов
(DEFUN BASE_TWOL (value)
((ZEROP value) NIL)
((= (MOD value 2) 1)
(CONS 1 (BASE_TWOL (/ (- value 1) 2)))
)
(CONS 0 (BASE_TWOL (/ value 2)))
)
;проверяет что value числовое, проверяет на 0, если отрицательное начинает список с минуса, сроит base_twol и реверсит
(DEFUN BT (value)
((NOT (INTEGERP value)) NIL)
((ZEROP value) 0)
((< value 0)
(CONS '- (REVERSE (BASE_TWOL (* value -1))))
)
(REVERSE (BASE_TWOL value))
)
Дата добавления: 2015-09-12; просмотров: 11 | Поможем написать вашу работу | Нарушение авторских прав |