Подскажите, существуют ли практические руководства по Lisp? - Страница 5
Реклама i
| Правила | Регистрация | Пользователи | Сообщения за день |  Справка по форуму | Файлообменник |

Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Подскажите, существуют ли практические руководства по Lisp?

Подскажите, существуют ли практические руководства по Lisp?

Ответ
Поиск в этой теме
Непрочитано 07.03.2006, 15:51
Подскажите, существуют ли практические руководства по Lisp?
vn
 
Регистрация: 10.02.2006
Сообщений: 373

Недавно купил книгу. Полный сборник команд Lisp с их описанием.
Но на этом все и кончилось. Никаких примеров для начинающих.
Если кто знает, с чего начинать изучение Lisp медленно и шаг за шагом , подскажите пожалуйста.
Просмотров: 77042
 
Непрочитано 02.06.2008, 14:57
#81
Александр Ривилис

программист, рыцарь ObjectARX
 
Регистрация: 09.05.2005
Киев
Сообщений: 2,413
Отправить сообщение для Александр Ривилис с помощью Skype™


P.S.: Кстати ни казахской, ни украинской локализации не существует в природе. И слава Богу!
Александр Ривилис вне форума  
 
Непрочитано 02.06.2008, 15:05
#82
Рyslan


 
Регистрация: 25.07.2007
Сообщений: 2,518


сплюнь, щас еще придумают. я язык не знаю совсем (казахский)
Рyslan вне форума  
 
Непрочитано 03.06.2008, 10:40
#83
Рyslan


 
Регистрация: 25.07.2007
Сообщений: 2,518


Гуру, зацените, у меня получилось! Программка рисует тройники! Ураа!
(defun C:TROYNIK()
(initget 7)
(setq R1 (getdist "\nБольшой радиус:"))
(setq r2 (getdist "\nМалый радиус:"))
(setq L (getdist "\nДлина тройника:"))
(setq H (getdist "\nВысота тройника:"))
(Command "_.View" "_Front")
(Command "_.Pline" "0,0" (list 0 R1) (list (* 2 L) R1) (list (* 2 L) 0) "C")
(setq Pline (entlast))
(Command "_.Revolve" Pline "" "X" "")
(command "_.UCS" "_New" (list L 0))
(Command "_.Pline" "0,0" (list 0 H) (list r2 H) (list r2 0) "C")
(setq Pline (entlast))
(Command "_.Revolve" Pline "" "Y" "")
(Command "_.Union" "ALL" "")
(command "_.UCS" "_World")
(Command "_.View" "_SWISO")
(princ)
)

Нормально, как считаете?
Рyslan вне форума  
 
Непрочитано 03.06.2008, 10:47
#84
Profan


 
Регистрация: 25.12.2005
Москва
Сообщений: 13,627


В русской версии не работает.
Profan вне форума  
 
Непрочитано 03.06.2008, 10:53
#85
Рyslan


 
Регистрация: 25.07.2007
Сообщений: 2,518


да? я о ней не подумал Сейчас подредактирую, у меня есть Автокад архитектура русский, там проверю
Рyslan вне форума  
 
Непрочитано 03.06.2008, 10:57
#86
Рyslan


 
Регистрация: 25.07.2007
Сообщений: 2,518


странно, что-то я в архитектуре не вижу где загружаются лиспы
Рyslan вне форума  
 
Непрочитано 03.06.2008, 10:58
#87
Кулик Алексей aka kpblc
Moderator

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


Туда же: а что с привязками?
P.S. Загружаются точно так же, как и в обычный AutoCAD
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 03.06.2008, 11:01
#88
Рyslan


 
Регистрация: 25.07.2007
Сообщений: 2,518


Вот, проверил, у меня работала
(defun C:TROYNIK()
(initget 7)
(setq R1 (getdist "\nБольшой радиус:"))
(setq r2 (getdist "\nМалый радиус:"))
(setq L (getdist "\nДлина тройника:"))
(setq H (getdist "\nВысота тройника:"))
(Command "_.View" "_Front")
(Command "_.Pline" "0,0" (list 0 R1) (list (* 2 L) R1) (list (* 2 L) 0) "_C")
(setq Pline (entlast))
(Command "_.Revolve" Pline "" "X" "")
(command "_.UCS" "_New" (list L 0))
(Command "_.Pline" "0,0" (list 0 H) (list r2 H) (list r2 0) "_C")
(setq Pline (entlast))
(Command "_.Revolve" Pline "" "Y" "")
(Command "_.Union" "_ALL" "")
(command "_.UCS" "_World")
(Command "_.View" "_SWISO")
(princ)
)
Рyslan вне форума  
 
Непрочитано 03.06.2008, 11:02
#89
Рyslan


 
Регистрация: 25.07.2007
Сообщений: 2,518


Да, привязки не работают. Не знаю почему. потом включаю вручную
Рyslan вне форума  
 
Непрочитано 03.06.2008, 11:06
#90
Рyslan


 
Регистрация: 25.07.2007
Сообщений: 2,518


кстати, у меня они тоже сначала не работали. потом я включил все привязки, загрузил лисп, модель построилась и привязки тоже работали
Рyslan вне форума  
 
Непрочитано 03.06.2008, 11:07
#91
VVA

Инженер LISP
 
Регистрация: 11.05.2005
Минск
Сообщений: 6,996


Пару замечаний:
1. В command используй и команды и их опции на английском языке с префиксом _ (почитай начало http://dwg.ru/art/11)
Код:
[Выделить все]
(Command "_.Pline" "0,0" (list 0 R1) (list (* 2 L) R1) (list (* 2 L) 0) "_C")
2. Рано или поздно наступишь на грабли №1. При использовании командных способов создания примитивов при указании точек на отключаешь привязку (переменная OSMODE)
Возможны два варианта
2.1 Сброс и восстановление OSMODE
Код:
[Выделить все]
(defun C:TROYNIK()
(initget 7)
(setq R1 (getdist "\nБольшой радиус:"))
(setq r2 (getdist "\nМалый радиус:"))
(setq L (getdist "\nДлина тройника:"))
(setq H (getdist "\nВысота тройника:"))
(setq osm (getvar "OSMODE")) ;_запоминаем привязку
(setvar "OSMODE" 0)          ;_Обнуляем
;;; ...  
;;; ... Что-то чертим
;;; ...
(setvar "OSMODE" osm)          ;_Восстанавливаем
(princ)
)
2.2 Использовать при указании КАЖДОЙ точки временную привязку "_non"
Код:
[Выделить все]
(Command "_.Pline" "_none" "0,0" "_none" (list 0 R1) "_none" (list (* 2 L) R1) "_none" (list (* 2 L) 0) "_C")
По п. 2.1. можно не сбрасывать объектную привязку, а отключать ее

Библиотечные функции
Код:
[Выделить все]
;;;================================================================================
;;;Функция отключения режима объектной привязки
(defun disable_osmode ()
  ;;Alaspher
  ;;(setvar "osmode" (logior oldosm 16384))
  (if (and (< (getvar "OSMODE") 16000)
	   (/= (getvar "OSMODE") 0)
	   )
	  (setvar "OSMODE" (+ (getvar "OSMODE") 16384))
	))
;;;================================================================================
;;;Функция включения режима объектной привязки
(defun enable_osmode ()
  (if (> (getvar "OSMODE") 16000)
    (setvar "OSMODE" (- (getvar "OSMODE") 16384))
  ) ;_if
) ;_ End of defun
Сама команда
Код:
[Выделить все]
(defun C:TROYNIK()
(initget 7)
(setq R1 (getdist "\nБольшой радиус:"))
(setq r2 (getdist "\nМалый радиус:"))
(setq L (getdist "\nДлина тройника:"))
(setq H (getdist "\nВысота тройника:"))
(disable_osmode) ;_Отключаем
  ;; Что-то делаем
  (enable_osmode) ;_ Включаем
(princ)
)
3. Сразу учись не засорять Автокад. Делай переменные локальными.
Код:
[Выделить все]
(defun C:TROYNIK( / r1 r2 L H Pline)
PS Долго писал. Надеюсь не напрасно
__________________
Как использовать код на Лиспе читаем здесь
VVA вне форума  
 
Непрочитано 03.06.2008, 11:12
#92
Рyslan


 
Регистрация: 25.07.2007
Сообщений: 2,518


Спасибо VVA, Profan и Алексей! Учту на будущее
Рyslan вне форума  
 
Непрочитано 21.06.2008, 20:07
#93
Рyslan


 
Регистрация: 25.07.2007
Сообщений: 2,518


Написал еще одну програмку, таким же методом как и предыдущие были, то есть ввод данных и дальше с помощью command какое-либо действие. Хотел спросить, как вы отладку программы делаете? Я через appload, постоянно свой лисп в акад гружу и смотрю что пишет. Еще вопрос, как вы считаете, командой command можно любую программку сделать? Или только такие простенькие как рисование перехода, отвода, тройника
Рyslan вне форума  
 
Непрочитано 23.06.2008, 01:04
#94
Кулик Алексей aka kpblc
Moderator

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


Честно скажу, (command) стараюсь не пользоваться чуть ли не по (уже) религиозным причинам. А так - в ком.строку, vlide, там открыть файл, установки точку останова ([F9]), и запускать А там пошаговое выполнение ([F8]) недалеко
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.06.2008, 06:19
#95
ShaggyDoc

Thượng Tá Quân Đội Nhân Dân Việt Nam
 
Регистрация: 14.03.2005
44d32'44"С, 33d26'51"В
Сообщений: 13,372


Цитата:
Сообщение от Рyslan Посмотреть сообщение
Написал еще одну програмку, таким же методом как и предыдущие были, то есть ввод данных и дальше с помощью command какое-либо действие. Хотел спросить, как вы отладку программы делаете? Я через appload, постоянно свой лисп в акад гружу и смотрю что пишет. Еще вопрос, как вы считаете, командой command можно любую программку сделать? Или только такие простенькие как рисование перехода, отвода, тройника
С помощью command любую программу сделать нельзя ("программку" можно). Рано или поздно столкнетесь с тем, на что никакой команды нет. Но программировать вполне возможно - может и на всю жизнь хватит. Только с умом, учитывая особенности command (правильное имя команд и опций,все точки в ПСК, влияние привязок и прочее).

По поводу отладки.

Файл программы, во время разработки, должен всегда быть в редакторе Visual LISP. Никакой appload к нему не надо. Там есть значок - загрузить файл в Автокад. Щелкаете, и текущая версия доступна. Можно загружать и отдельно выделенный блок - это чтобы проверить части программы. Здесь надо фантазировать - например, можно где-то в комментариях написать присваивание значений переменным, являющихся аргументами функции, а потом выполнять кусочки кода, отправляя из в Автокад. Результаты также выводятся в окно.

И, разумеется, то, про что Алексей написал - штатные средства отладки. Их надо только изучить.
ShaggyDoc вне форума  
 
Непрочитано 23.06.2008, 08:11
#96
Рyslan


 
Регистрация: 25.07.2007
Сообщений: 2,518


Спасибо! Vlsual Lisp Editor я использую, правда редко еще. Менюшку еще не изучил, а так обычно вставляю туда лисп и кнопкой Check window проверяю. Ну а если лисп можно а акад прямо оттуда грузить то вообще красота, а то я запарился каждый раз его в автокад подругажть через аплоад.
Рyslan вне форума  
 
Непрочитано 23.06.2008, 08:20
#97
Кулик Алексей aka kpblc
Moderator

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


Тебе видео снять, как я "программирую" (если это можно программированием назвать) ?
Написание, отладка, пошаговое выполнение... Только задачку поставь
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 23.06.2008, 08:46
#98
Рyslan


 
Регистрация: 25.07.2007
Сообщений: 2,518


я ж от этого не начну сразу программировать. Да я так, чисто от делать нечего, все равно не стану великим программистом Задачку говоришь, задачку можно. после обеда свой лисп принесу, постараюсь не забыть
Рyslan вне форума  
 
Непрочитано 23.06.2008, 10:57
#99
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Цитата:
Сообщение от VVA Посмотреть сообщение
Код:
[Выделить все]
(defun C:TROYNIK()
(initget 7)
(setq R1 (getdist "\nБольшой радиус:"))
(setq r2 (getdist "\nМалый радиус:"))
(setq L (getdist "\nДлина тройника:"))
(setq H (getdist "\nВысота тройника:"))
(disable_osmode) ;_Отключаем
  ;; Что-то делаем
  (enable_osmode) ;_ Включаем
(princ)
)
Покритикую немного.

В предложенном варианте, перед началом выполнения действий, привязка выключается, а по окончании работы программы принудительно включается, что не есть хорошо. Правильно восстанавливать состояние среды на выходе таким, какое оно было до работы программы. Потому, если вообще отключать, всёж рекомендую связку:
Код:
[Выделить все]
(setq osm (getvar "OSMODE"))
(setvar "osmode" (logior osm 16384))
;;; ...  
;;; ... Что-то чертим
;;; ...
(setvar "OSMODE" osm)
Использование конструкции (logior osm 16384) позволяет не сильно переживать о восстановлении при завершении с ошибкой - пользователю достаточно нажать F3, что приемлемое неудобство.
Alaspher вне форума  
 
Непрочитано 23.06.2008, 11:11
#100
Alaspher


 
Регистрация: 11.10.2004
e•burg
Сообщений: 755


Цитата:
Сообщение от VVA Посмотреть сообщение
[/code]

По п. 2.1. можно не сбрасывать объектную привязку, а отключать ее

Библиотечные функции
Код:
[Выделить все]
;;;================================================================================
;;;Функция отключения режима объектной привязки
(defun disable_osmode ()
  ;;Alaspher
  ;;(setvar "osmode" (logior oldosm 16384))
  (if (and (< (getvar "OSMODE") 16000)
       (/= (getvar "OSMODE") 0)
       )
      (setvar "OSMODE" (+ (getvar "OSMODE") 16384))
    ))
;;;================================================================================
;;;Функция включения режима объектной привязки
(defun enable_osmode ()
  (if (> (getvar "OSMODE") 16000)
    (setvar "OSMODE" (- (getvar "OSMODE") 16384))
  ) ;_if
) ;_ End of defun
Ещё немного критики.

Если делать отдельные переключалки, то конструкции:
Код:
[Выделить все]
(defun disable_osmode ()
 (setvar "osmode" (logior (getvar "osmode") 16384))
)
(defun enable_osmode ()
 (setvar "osmode" (boole 2 (getvar "osmode") 16384))
)
выглядят проще, а делают тоже самое. Или я упустил какие-то подводные камни?
Alaspher вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Подскажите, существуют ли практические руководства по Lisp?