Начинаю изучать LISP. Помогите сделать два задания.
1. Удалить из списка заданное число первых элементов.
2. Определить функцию, которая обращает список и разбивает его на уровни: (А В С) -> (((С)В)А)
Первую вроде решил вот:
(DEFUN D (X K)
(COND ( (= K 0) X)
( (> K 0) (D (cdr X) (- K 1) ) ) ) )
Во второй обратить список сделал:
(defun REV (L)
(cond
((atom L) L)
((null (cdr L)) (cons (REV(car L)) nil))
(T (append (REV(cdr L)) (REV (cons (car L) nil))))))
А как разбить его на уровни чето не догоняю. Помогите!
11 ноября 2009 в 1:01
В универе…
11 ноября 2009 в 0:04
Пожалуйста. А где это лиспу учат? У меня в универе, попросишь — не дадут.
ЗЫ: Если вздумал интересоваться им, то лучше начать с диалекта Scheme.
11 ноября 2009 в 0:03
Спасибо большое!
10 ноября 2009 в 23:05
Держи //paste.lisp.org/display/90128
Или вот. Но вкантыч собъёт все отступы:
(defun kill (lst n)
(if (eq n 0)
lst
(kill (cdr lst) (- n 1))))
(defun rev-tail (lst)
(if (eq (cdr lst) nil)
(list (car lst))
(cons (rev-tail (cdr lst))
(list (car lst)))))
10 ноября 2009 в 23:04
а вообще проще, возвращать при реверсии, элемент в скобках
10 ноября 2009 в 23:04
Не соображу, как в код что впихнуть…
10 ноября 2009 в 23:04
я вот лисп сто лет вживую не видел, но насколько помню, то вот эту строчку ((atom L) L), поменять на эту ((atom (L)) L)
10 ноября 2009 в 23:04
Нет, в скобках L он воспримимает как функцию и говорит, что не знает ее…
10 ноября 2009 в 23:03
присоединять элемент в скобках, к след. элементу в скобках.