Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Lisp
Перезагрузить страницу AutoLISP добавления элемента в список в указанное место
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
rererer rererer вне форума
Новичок
 
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 05.12.2009
По умолчанию AutoLISP добавления элемента в список в указанное место - 05.12.2009, 23:55

Уважаемые форумчане. Помогите, пожалуйста, написать программу на языке AutoLISP добавления элемента в список в указанное место, используя информацию об элементах, хранящуюся в списке. Под элементом понимается либо атом, либо список.

Работа программы должна осуществляться следующим образом. Заранее руками создается список и сохраняется в файл, например текстовый.
Файл распечатывается и отдается преподавателю. Преподаватель в какое-нибудь место списка просит вставить атом или список. Студент вводит номер уровня, номер элемента(списка или атома) и сам элемент. Программа выводит на экран новый список со вновь вставленным элементом и сохраняет его в файл.

Если есть у кого что-то похожее, поделитесь, пожалуйста.
Ответить с цитированием
  (#2 (permalink)) Старый
rererer rererer вне форума
Новичок
 
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 05.12.2009
По умолчанию 06.12.2009, 23:50

Если встречалась подобная задача на форуме, дайте, пожалуйста, ссылку.
Ответить с цитированием
  (#3 (permalink)) Старый
rererer rererer вне форума
Новичок
 
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 05.12.2009
По умолчанию 07.12.2009, 23:04

помогите, пожалуйста, написать функцию, добавляющую элемент в нужное место нужного уровня списка.
Ответить с цитированием
  (#4 (permalink)) Старый
rererer rererer вне форума
Новичок
 
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 05.12.2009
По умолчанию 10.12.2009, 23:21

Я разобрался, что эта функция вставляет элемент в нужную позицию одноуровнего списка. А как сделать возможность втавить элемент не в первый, а например в третий уровень списка на нужную позицию? Рекурсия нужна? Например в ((1 4) 8 (((4 6) 5) 7)) вставить перед шестеркой девятку.
Код:
(defun F (L X N)
  (cond
   ((null L) nil)
   ((minusp N) L)
   ((zerop N) (cons X L))
   (T (cons (car L) (F (cdr L) X (1- N))))))
Ответить с цитированием
  (#5 (permalink)) Старый
VH VH вне форума
Member
 
Сообщений: 781
Сказал(а) спасибо: 0
Поблагодарили 11 раз(а) в 10 сообщениях
Регистрация: 29.06.2006
По умолчанию 18.12.2009, 03:47

Индексы элементов начинаются с нуля! Если задан индекс на единицу больше максимального на данном уровне - элемент добавляется в конец списка. Если задан индекс, более чем на единицу превышающий максимальный на данном уровне - функция «зависает». Если на данном уровне несколько списков и индекс на единицу больше индекса последнего элемента в очередном списке, то элемент добавляется в данный список, а не в начало следующего (на то место добавить нельзя).
Уровни нумеруются с нуля! Если задан уровень больше максимального - функция «зависает».
Код:
(defun F (L Level Index Value)
  (if (zerop Level)
   (if (zerop Index)
    (cons Value L)
    (if L
     ((lambda (result)
       (if (numberp result)
        result
        (cons (car L) result)))
      (F (cdr L) Level (1- Index) Value))
     Index))
   (if (atom (car L))
    (cons (car L) (F (cdr L) Level Index Value))
    ((lambda (result)
      (if (numberp result)
       (cons (car L) (F (cdr L) Level result Value))
       (cons result (cdr L))))
     (F (car L) (1- Level) Index Value)))))
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
rererer rererer вне форума
Новичок
 
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 05.12.2009
По умолчанию 27.01.2010, 18:02

Спасибо Вам огромное. Зачет сдал.
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удалить все вхождения элемента Х в список L Chummy89 Lisp 3 08.12.2011 14:58
добавление элемента в список katik Prolog 2 17.04.2011 17:45
Номер последнего вхождения элемента a в список L Bigspacehamster Lisp 4 31.05.2010 19:17
Получить список всех делителей на указанное число.Prolog armoko Prolog 3 13.04.2010 08:23
Определить число вхождений элемента X в список L AntonioG1988 Lisp 13 21.12.2009 16:25
вставка элемента в список после всех мин элементов Evans Prolog 0 28.05.2008 22:38
Добавить элемент E в список L, поставив его на второе место списка vorm Lisp 10 26.05.2007 12:20
Добавление элемента в список doom_mm Prolog 8 23.04.2007 13:02
Добавление элемента в список по условию Emeryk Prolog 2 17.11.2006 15:02
Передвинуть белые шары на место черных, а черные - на место белых ZN Lisp 1 27.04.2006 08:01
Вставка элемента в отсортированный список Isav Prolog 10 28.03.2006 18:14
Двойное вхождение элемента в список Максимыч Prolog 1 18.02.2006 12:17



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов