Micro Lisp. Основные понятия, структуры и функции. Яшин Л.З. - 35 стр.

UptoLike

Составители: 

35
Варианты решений
Определите функцию LAST1, возвращающую последний элемент списка.
Функция:
(define (LAST1 L)
(cond
((null? (cdr L)) (car L)) ;если только один элемент
;(нет хвоста) -
;возвратить его значение
(t (LAST1 (cdr L))) ;иначе - вернуть
;последний эл-т хвоста
)
)
Результат выполнения:
[1] (last1 '(a bc def))
DEF
Определите функцию DELLAST1, удалающую из списка последний элемент.
Функция:
(define (DELLAST L)
(cond
((null? (cdr L)) nil) ;если в L только один
элемент,
;то возвращаем nil
(t (cons (car L) (DELLAST (cdr L))))
;если больше одного
эл-та -
возвращаем
;список из первого эл-та L
и
;"обрезанного" хвоста L
)
)
Результат выполнения:
[4] (DELLAST '(a bc def))
(A BC)
Определите предикат (функцию) ATOMLIST, проверяющий, является ли
предикат одноуровневым списком.
Функция:
(define (ATOMLIST L)
(cond
((null? L) t) ;true - если список пуст
((atom? (car L)) (ATOMLIST (cdr L)))
;если голова списка -
;атом - продолжаем
;проверку хвоста
(t nil)
)
)
Результат выполнения:
[1] (ATOMLIST '(a bc def))
#T
[2] (ATOMLIST '(a (bc def)))
()
Определите функцию ONION («луковица»), строящую N-уровневый вложенный
список.
Функция:
(define (ONION N)
(if (= n 0)
                                     35


Варианты решений

   Определите функцию LAST1, возвращающую последний элемент списка.
Функция:
(define (LAST1 L)
      (cond
             ((null? (cdr L)) (car L))          ;если только один элемент
                                                ;(нет хвоста) -
                                                ;возвратить его значение
             (t (LAST1 (cdr L)))                ;иначе - вернуть
                                                ;последний эл-т хвоста
      )
)
Результат выполнения:
        [1] (last1 '(a bc def))
        DEF

   Определите функцию DELLAST1, удалающую из списка последний элемент.
Функция:
(define (DELLAST L)
      (cond
             ((null? (cdr L)) nil)               ;если в L только один
элемент,
                                                  ;то возвращаем nil
             (t (cons (car L) (DELLAST (cdr L))))
                                                  ;если больше одного эл-та -
возвращаем
                                                  ;список из первого эл-та L
             и
                                                  ;"обрезанного" хвоста L
      )
)
Результат выполнения:
        [4] (DELLAST '(a bc def))
        (A BC)

   Определите предикат (функцию) ATOMLIST, проверяющий, является ли
   предикат одноуровневым списком.
Функция:
(define (ATOMLIST L)
      (cond
             ((null? L) t)                        ;true - если список пуст
             ((atom? (car L)) (ATOMLIST (cdr L)))
                                                  ;если голова списка -
                                                  ;атом - продолжаем
                                                  ;проверку хвоста
             (t nil)
      )
)
Результат выполнения:
        [1] (ATOMLIST '(a bc def))
        #T
        [2] (ATOMLIST '(a (bc def)))
        ()
   Определите функцию ONION («луковица»), строящую N-уровневый вложенный
   список.
Функция:
(define (ONION N)
         (if (= n 0)