Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Простые задачи по LISP не могу решить, Только начал изучать  
:(
    Опции темы
angelw
Дата 11.1.2010, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 11.1.2010

Репутация: нет
Всего: нет



Доброго дня! Господа, начал заниматься этим языком и есть некоторые задачки, если есть среди Вас ГУРУ в этом деле, то хочу попросить о помощи. 
Нужно создать функции:

1. Функция DEVLEV1 – разбивает список на уровни. Пример: исходный список – (a b c), результирующий список – (a (b ©)) 
2. Функция APPEND – соединяет два списка в один новый список 
3. Функция REMSEC – удаляет из списка каждый второй элемент 
4. Функция BULB (ЛУКОВИЦА) – строит N-уровневый вложенный список, элементом которого на самом глубоком уровне является N 

Еще нужно создайть минимальный интерпретатор языка Лисп с поддержкой функций quote, cond, car, cdr, atom, equal, lambda, last, first, second, third, rest

Очень Вас прошу о помощи, не знаю где мне еще писать... smile 

За ранее спасибо! smile 
PM MAIL   Вверх
VH_
Дата 11.1.2010, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 182
Регистрация: 31.10.2006

Репутация: 10
Всего: 11



PM MAIL   Вверх
angelw
Дата 12.1.2010, 21:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 11.1.2010

Репутация: нет
Всего: нет



Спасибо! smile 
PM MAIL   Вверх
AyeAye
Дата 16.1.2010, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 11.1.2010

Репутация: нет
Всего: нет



Цитата




Это сообщение отредактировал(а) AyeAye - 16.1.2010, 21:17
PM MAIL   Вверх
VH_
Дата 16.1.2010, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 182
Регистрация: 31.10.2006

Репутация: 10
Всего: 11



>AyeAye
Что за бред, извините за резкость, Вы здесь представили?
Где определения используемой Вами функции (crd)?
По какой причине при «тестировании» вызов определяемой Вами функции (append1) подменен вызовом встроенной функции (append)?
В задании ясно сказано «...соединяет два списка в один новый список...»
PM MAIL   Вверх
AyeAye
Дата 18.1.2010, 01:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 11.1.2010

Репутация: нет
Всего: нет



извените за глупость пожалуйста, я второй день лисп изучаю. просто по невнимательности не увидел что применил стандартную функцию для проверки вместо своей, и при этом само сабой не знал что мой код не верен... 
думал на подобие append в Prolog сделать... по этому три аргумента.

вот правельный вариант:
Код

;;invers ивертирует список
(defun invers(L)
 (setq L1 '()) ;новый пустой список L1 
  (loop for i from 1 to (length L) do ;от одного до длины L
    (setq L1 (cons (car L) L1) );присоединяем голову L к L1
    (setq L (cdr L));отрезаем L голову
  )
  L1 ;в L1 теперь весь L только задом-наперед
)
;проверка:
(invers '(1 2 3 4 5 6));(6 5 4 3 2 1)
;;собственно сам append
(defun ae(L1 L2)
  (setq L3 (list));создать пустой список по имени L3
  (setq L1 (invers L1));инверсировать L1
  (setq L2 (invers L2));инверсировать L2
  (loop for i from 1 to (length L2) do ;переписать L2 в L3
     (setq L3 (cons (car L2) L3) )
     (setq L2 (cdr L2))
  )
  (loop for i from 1 to (length L1) do ;переписать L1 в L3
    (setq L3 (cons (car L1) L3) )
    (setq L1 (cdr L1))
  )
  L3 ;вернуть L3
)

;тесты:
(ae '(g z h e y w) '(n e b q k))

;результат: (G Z H E Y W N E B Q K)
надеюсь нет ничего плохого в том, что я использовал несколько функций для решения этой задачи? может просто требуется какнибудь рекурсивно одной и тойже функцией два списка склеить?

Это сообщение отредактировал(а) AyeAye - 18.1.2010, 01:40
PM MAIL   Вверх
AyeAye
Дата 18.1.2010, 01:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 11.1.2010

Репутация: нет
Всего: нет



первая, разбивает список на уровни
Код

(defun dvlvl(L)
  (if
    (eq (cdr L) nil)
      L
      (setq L (cons (car L)  (list (dvlvl (cdr L)))))
  )
  L
)

(dvlvl '(a b c d))



Добавлено через 12 минут и 53 секунды
третья:
Код

;;;Функция REMSEC – удаляет из списка каждый второй элемент
(defun remsec(L)
  (if (eq (cdr L) nil)
    (car L)
    (setq L (cons (car L) (remsec(cdr (cdr L))) ) )
  )
  L
)
(remsec '(a b c d e f g h i j k)) ;(A C E G I K)
(remsec '(a b c d e f g h i j )) ;(A C E G I)


PM MAIL   Вверх
AyeAye
Дата 18.1.2010, 02:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 11.1.2010

Репутация: нет
Всего: нет



четвертая:
Код

(defun bulb(n max)
  (if (eq n max)
    (list n)
    (list n (bulb (+ n 1) max))
  )
)
(bulb 1 10) ;(1 (2 (3 (4 (5 (6 (7 (8 (9 (10))))))))))



Добавлено через 6 минут и 25 секунд
а! ну вот! smile я разобрался как надо было append сделать:
Код

(defun aend(L1 L2)
  (if (endp L1)
    (if (endp L2)
      (car L2)
      (cons (car L2) (aend L1 (cdr L2)))
    )
    (cons (car L1) (aend (cdr L1) L2))
  )
)
(aend '(a b c d e) '(f g h i j k m)) ;(A B C D E F G H I J K M)


PM MAIL   Вверх
VH_
Дата 18.1.2010, 02:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 182
Регистрация: 31.10.2006

Репутация: 10
Всего: 11



Код
(defun APPEND1 (L1 L2)
 (if L1
  (cons (car L1) (APPEND1 (cdr L1) L2))
  L2))

PM MAIL   Вверх
VH_
Дата 18.1.2010, 03:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 182
Регистрация: 31.10.2006

Репутация: 10
Всего: 11



Код
(defun BULB (N)
 (if (zerop N) N
  ((lambda (result)
    (list (F result)))
   (BULB (1- N)))))

Код
(defun F (L)
 (if L
  (if (atom L) (1+ L)
   (list (F (car L))))))

PM MAIL   Вверх
_sg
Дата 25.4.2014, 10:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 119
Регистрация: 16.5.2007

Репутация: 2
Всего: 2



как вариант:
Код

(defun onion-n (n &optional (m n))
  (if (zerop n) m `(,(onion-n (1- n) m))))
 
> (onion-n 7)
(((((((7)))))))

--------------------
vk.com/ansicommonlisp
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума LISP
Void
  • Пожалуйста, создавайте темы с содержательными названиями.
  • Lisp — это целое семейство языков. Всегда указывайте в теме используемый диалект (Common Lisp, Scheme и т.д.).
  • Уважаемые учащиеся, здесь всегда рады помочь Вам, но не делать за Вас вашу работу. У вас гораздо больше шансов получить помощь, если Вы приложите усилия и поделитесь с нами проблемами и результатами. В противном случае добро пожаловать в раздел Центр Помощи.
  • Получив ответ на интересующий Вас вопрос, не забудьте пометить его как решённый.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Void.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | LISP | Следующая тема »


 




[ Время генерации скрипта: 0.0486 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.