Реклама на сайте English version  DatasheetsDatasheets

KAZUS.RU - Электронный портал. Принципиальные схемы, Datasheets, Форум по электронике

Новости электроники Новости Литература, электронные книги Литература Документация, даташиты Документация Поиск даташитов (datasheets)Поиск PDF
  От производителей
Новости поставщиков
В мире электроники

  Сборник статей
Электронные книги
FAQ по электронике

  Datasheets
Поиск SMD
Он-лайн справочник

Принципиальные схемы Схемы Каталоги программ, сайтов Каталоги Общение, форум Общение Ваш аккаунтАккаунт
  Каталог схем
Избранные схемы
FAQ по электронике
  Программы
Каталог сайтов
Производители электроники
  Форумы по электронике
Помощь проекту

Делимся опытом Наступив на грабли - сообщи другим! Обмен опытом разработки и ремонта электронных устройств.

 
Опции темы
Непрочитано 16.08.2013, 08:38  
DK
Почётный гражданин KAZUS.RU
 
Аватар для DK
 
Регистрация: 10.05.2003
Адрес: Москва
Сообщений: 2,529
Сказал спасибо: 737
Сказали Спасибо 1,927 раз(а) в 799 сообщении(ях)
DK на пути к лучшему
По умолчанию LISP. Три полезные функции

Давеча переклинило мозг на простой задаче - поменять местами два элемента в списке. В массиве это достаточно легко делается... В "нормальных языках". Но не в списке ЛИСПа. Особенно, если элемент - тоже список. А если это AutoLisp (то бишь встроенный в автокад несколько урезанный вариант)...
В общем, нашел на просторах инета. Мож кому пригодится.

Функция удаляющая элемент списка по номеру
Код:
;-------------------------------------------------------------------------------
; Delete_nth - Deletes the nth item from a list.
; Arguments: 2
;   Num# = Nth number in list to delete
;   OldList@ = List to delete the nth item
; Returns: A list with the nth item deleted.
;-------------------------------------------------------------------------------
(defun Delete_nth (Num# OldList@ / Cnt# Item NewList@)
  (if (and (= (type Num#) 'int)(= (type OldList@) 'list))
    (progn
      (setq Cnt# 0)
      (foreach Item OldList@
        (if (/= Cnt# Num#)
          (if NewList@
            (setq NewList@ (append NewList@ (list Item)))
            (setq NewList@ (list Item))
          );if
        );if
        (setq Cnt# (1+ Cnt#))
      );foreach
    );progn
    (setq NewList@ OldList@)
  );if
  NewList@
);defun Delete_nth
Функция вставляющая элемент в список
Код:
;-------------------------------------------------------------------------------
; Insert_nth - Inserts a new item value into the nth number in list.
; Arguments: 3
;   Num# = Nth number in list to insert item value
;   Value = Item value to insert
;   OldList@ = List to insert item value
; Returns: A list with the new item value inserted.
;-------------------------------------------------------------------------------
(defun Insert_nth (Num# Value OldList@ / Cnt# Item NewList@)
  (if (and (= (type Num#) 'int)(= (type OldList@) 'list))
    (progn
      (setq Cnt# 0)
      (foreach Item OldList@
        (if (= Cnt# Num#)
          (progn
            (if NewList@
              (setq NewList@ (append NewList@ (list Value)))
              (setq NewList@ (list Value))
            );if
            (if NewList@
              (setq NewList@ (append NewList@ (list Item)))
              (setq NewList@ (list Item))
            );if
          );progn
          (if NewList@
            (setq NewList@ (append NewList@ (list Item)))
            (setq NewList@ (list Item))
          );if
        );if
        (setq Cnt# (1+ Cnt#))
      );foreach
      (if (›= Num# (length OldList@))
        (if NewList@
          (setq NewList@ (append NewList@ (list Value)))
          (setq NewList@ (list Value))
        );if
      );if
    );progn
    (setq NewList@ OldList@)
  );if
  NewList@
);defun Insert_nth
Функция меняющая два элемента списка местами
Код:
;-------------------------------------------------------------------------------
; Switch_nth - Switches the nth Num1# and Num2# item values in a list.
; Arguments: 3
;   Num1# = nth number in list to switch with nth Num2#
;   Num2# = nth number in list to switch with nth Num1#
;   OldList@ = List to switch item values
; Returns: A list with two item values switched.
;-------------------------------------------------------------------------------
(defun Switch_nth (Num1# Num2# OldList@ / Cnt# Item NewList@ NewValue Valid)
  (if (and (= (type Num1#) 'int)(= (type Num2#) 'int)(= (type OldList@) 'list))
    (setq Valid t)
  );if
  (if (and Valid (‹ Num1# (length OldList@))(‹ Num2# (length OldList@))
      (/= Num1# Num2#)
    );and
    (progn
      (setq Cnt# 0)
      (foreach Item OldList@
        (cond
          ((= Cnt# Num1#)(setq NewValue (nth Num2# OldList@)))
          ((= Cnt# Num2#)(setq NewValue (nth Num1# OldList@)))
          (t (setq NewValue Item))
        );cond
        (if NewList@
          (setq NewList@ (append NewList@ (list NewValue)))
          (setq NewList@ (list NewValue))
        );if
        (setq Cnt# (1+ Cnt#))
      );foreach
    );progn
    (setq NewList@ OldList@)
  );if
  NewList@
);defun Switch_nth
__________________
Опыт - это школа, в которой человек узнает, каким дураком он был раньше.
DK вне форума  
Эти 2 пользователя(ей) сказали Спасибо DK за это сообщение:
hacker7 (27.08.2013), кустомер (16.08.2013)
 

Закладки
Опции темы

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

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

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Изучение PIC C Compiler(CCS C) CERGEI1982 Embedd С 1984 30.08.2023 14:10
Книги dosikus Делимся опытом 11242 29.12.2015 23:45
Расчет функции косинус Nihoden TTL и CMOS логика 26 14.05.2013 16:49
Алкоголь, алкоголизм... (отделено) Глaвврач Отвлекитесь, эмбеддеры! 289 22.04.2012 12:26


Часовой пояс GMT +4, время: 13:24.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd. Перевод: zCarot