Остаток списка начиная с позиции
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Прочее. Программное обеспечение > Остаток списка начиная с позиции

Остаток списка начиная с позиции

Ответ
Поиск в этой теме
Непрочитано 28.12.2007, 11:44 #1
Остаток списка начиная с позиции
[N.S]
 
инженер-дефектоскопист
 
Санкт-Петербург
Регистрация: 08.12.2006
Сообщений: 58

Подскажите пожалуйста, есть ли лисп функция с помощью которой можно получить остаток списка начиная с определенной позиции? Что-то наподобие (nth i) только, возвращающая остаток списка, а не один элемент.
Или придется писать что-то типа:
Код:
[Выделить все]
(setq tail searchlist)
(repeat i (setq tail (cdr tail)))
Просмотров: 2265
 
Непрочитано 28.12.2007, 11:49
#2
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,425


(cdr (member item lst))
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Автор темы   Непрочитано 28.12.2007, 12:00
#3
[N.S]

инженер-дефектоскопист
 
Регистрация: 08.12.2006
Санкт-Петербург
Сообщений: 58


Спасибо большое за оперативность, но это не то, что я ищу. Мне нужен остаток списка не от вхождения определенного элемента, а от начиная с некоторого порядкового номера. Например, список '(a b c c c d), а нужно получить хвост после 4-го элемента - '(c d)
[N.S] вне форума  
 
Непрочитано 28.12.2007, 12:16
#4
Кулик Алексей aka kpblc
Moderator

LISP, C# (ACAD 200[9,12,13,14])
 
Регистрация: 25.08.2003
С.-Петербург
Сообщений: 40,425


Вбыструю, без поиска встроенных функций:
Код:
[Выделить все]
(defun test (pos lst / res item)
  (while (>= (- (length lst) pos) 0)
    (setq res (cons (nth pos lst) res)
          pos (1+ pos)
          ) ;_ end of setq
    ) ;_ end of while
  (reverse res)
  ) ;_ end of defun

;|
;;; Пример использования:
(setq lst '(0 1 2 3 4 0 10 1 12 1 13 1 14 1 15)
      pos 3)
(test pos lst)	; '(3 4 0 10 1 12 1 13 1 14 1 15)
|;
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 28.12.2007, 12:19
#5
Zouss


 
Регистрация: 14.03.2006
Сообщений: 863


если элементы списка неуникальны придется писать что-то вроде:
Код:
[Выделить все]
(defun f1 (pos lst /)
  (repeat pos (setq lst (cdr lst)))
  lst
)
код не проверял
Zouss вне форума  
 
Автор темы   Непрочитано 28.12.2007, 12:42
#6
[N.S]

инженер-дефектоскопист
 
Регистрация: 08.12.2006
Санкт-Петербург
Сообщений: 58


Можно и так:
Код:
[Выделить все]
(defun _list-tail (pos lst / res)
  	(setq res lst)
  	(repeat pos (setq res (cdr res)))
  	res
) ;_ end of defun
;|
Пример использования:
(setq lst '(a b c d c e f g c h c c)
      pos 2)
(_list-tail pos lst)	; '(C D C E F G C H C C)
(_list-tail 0 lst)	; '(A B C D C E F G C H C C)
|;
Но все же интересует именно встроенная функция.
Перерыл весь хелп по лиспу -> не нашел.(
[N.S] вне форума  
 
Автор темы   Непрочитано 28.12.2007, 12:43
#7
[N.S]

инженер-дефектоскопист
 
Регистрация: 08.12.2006
Санкт-Петербург
Сообщений: 58


Ссори. Тут уже изменеия произошли, пока ответ писал. В итоге тоже самое что Zouss написал. =)
[N.S] вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Прочее. Программное обеспечение > Остаток списка начиная с позиции



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нумерация в МТекст Bull AutoCAD 36 01.12.2022 14:24
структурированный список Holon Программирование 22 11.09.2007 14:09
Исключение элементов одного списка из другого по маске Кулик Алексей aka kpblc Программирование 3 18.09.2006 17:31
Как выделить часть элементов из списка? kolobrod Программирование 6 09.09.2006 15:51
чтение данных из файла Александер Программирование 6 08.09.2005 10:24