singlepost

Лисп << На главную или назад  

Начинаю изучать 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))))))

А как разбить его на уровни чето не догоняю. Помогите!

22 ответов в теме “Лисп”

  1. 1
    Владимир Стебунов ответил:

    присоединять элемент в скобках, к след. элементу в скобках.

  2. 2
    Владимир Стебунов ответил:

    а вообще проще, возвращать при реверсии, элемент в скобках

  3. 3
    Сергей Босалаев ответил:

    Не соображу, как в код что впихнуть…

  4. 4
    Владимир Стебунов ответил:

    я вот лисп сто лет вживую не видел, но насколько помню, то вот эту строчку ((atom L) L), поменять на эту ((atom (L)) L)

  5. 5
    Сергей Босалаев ответил:

    Нет, в скобках L он воспримимает как функцию и говорит, что не знает ее…

  6. 6
    Владимир Гордеев ответил:

    Держи http://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)))))

  7. 7
    Сергей Босалаев ответил:

    Спасибо большое!

  8. 8
    Владимир Гордеев ответил:

    Пожалуйста. А где это лиспу учат? У меня в универе, попросишь — не дадут.

    ЗЫ: Если вздумал интересоваться им, то лучше начать с диалекта Scheme.

  9. 9
    Сергей Босалаев ответил:

    В универе…

Клуб программистов работает уже ой-ой-ой сколько, а если поточнее, то с 2007 года.