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

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

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

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

Недавно купил книгу. Полный сборник команд Lisp с их описанием.
Но на этом все и кончилось. Никаких примеров для начинающих.
Если кто знает, с чего начинать изучение Lisp медленно и шаг за шагом , подскажите пожалуйста.
Просмотров: 76733
 
Непрочитано 30.01.2009, 11:08
#121
Рyslan


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


Всем привет! Подскажите как правильно ввести точку. Никак не могу понять. Лисп прилагаю

(defun C:OTV (/ D Rdug x1 y1)

(initget 7)

(setq P1 (getpoint '(list x1 y1) "\nНачальная точка:"))

(setq D (getdist "\nДиаметр отвода:"))
(setq Rdug (getdist "\nРадиус отвода:"))

(setq Rv (- Rdug (* 0.5 D)))
(setq Rn (+ Rdug (* 0.5 D)))


(setq P1 (list x1 y1))
(setq y2 (+ y1 (* 0.5 D)))
(setq y4 (- (* 0.5 D) y1))

(setq P2 (list x1 y2))
(setq P3 (list Rv (+ Rv (* 0.5 D))))
(setq P4 (list Rdug (+ Rv (* 0.5 D))))
(setq P5 (list Rn (+ R (* 0.5 D))))
(setq P6 (list x1 y4))

(command "_.Pline" P1 P2 P3 P4 P5 P6 "_cl")

(command "_.zoom" "_e")
(princ)
)
Рyslan вне форума  
 
Непрочитано 30.01.2009, 12:18
#122
Кулик Алексей aka kpblc
Moderator

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


Может, надо как-то так (особо в логику не вникал):
Код:
[Выделить все]
(defun C:OTV (/ D Rdug x1 y1 Rv Rn P1 y2 y4 P2 P3 P4 P5 P6 osmode)
  (initget 7)
  (setq P1   (getpoint "\nНачальная точка:")
        D    (getdist "\nДиаметр отвода:")
		Rdug (getdist "\nРадиус отвода:")
		Rv (- Rdug (* 0.5 D))
		Rn (+ Rdug (* 0.5 D))
		P1 (list x1 y1)
		y2 (+ y1 (* 0.5 D))
		y4 (- (* 0.5 D) y1)
		P2 (list x1 y2)
		P3 (list Rv (+ Rv (* 0.5 D)))
		P4 (list Rdug (+ Rv (* 0.5 D)))
		P5 (list Rn (+ R (* 0.5 D)))
		P6 (list x1 y4)
		osmode(getvar "osmode"))
  (setvar "osmode" 0)
  (command "_.Pline" P1 P2 P3 P4 P5 P6 "_cl")
  (setvar "osmode" osmode)
  (command "_.zoom" "_e")
  (princ)
  )
__________________
Моя библиотека lisp-функций
---
Обращение ко мне - на "ты".
Все, что сказано - личное мнение.
Кулик Алексей aka kpblc вне форума  
 
Непрочитано 30.01.2009, 17:39
#123
Рyslan


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


Выдает ошибку, также как и мне в моем лиспе
; ошибка: неверный тип аргумента: numberp: nil
Рyslan вне форума  
 
Непрочитано 30.01.2009, 19:48
#124
ShaggyDoc

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


А x1 и y1 кто будет инициализировать? Они nil, вот и ошибка
ShaggyDoc вне форума  
 
Непрочитано 31.01.2009, 11:14
#125
Рyslan


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


а я же ввел x1 y1, (setq P1 (getpoint '(list x1 y1) "\nНачальная точка:"))
неправильно?
Рyslan вне форума  
 
Непрочитано 31.01.2009, 11:40
#126
ShaggyDoc

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


Цитата:
Сообщение от Рyslan Посмотреть сообщение
а я же ввел x1 y1, (setq P1 (getpoint '(list x1 y1) "\nНачальная точка:"))
неправильно?
Разумеется неправильно. Ты не "ввел", а пытаешься сформировать точку из несуществующих значений. Где-то в начале должны быть присвоены значения, наподобие:

(setq x1 100.0 y1 0.0)

И только потом как-то использовать.
ShaggyDoc вне форума  
 
Непрочитано 31.01.2009, 12:38
#127
Рyslan


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


А если я не знаю какими будут координаты? Нужно чтобы они были произвольными, указал точку на поле чертежа, вот и координаты точки P1(x1;y1). Вот я и хочу, указать начальную точку и потом с помощью quote вернуть значения x1;y1. А в твоем выражении (setq x1 100.0 y1 0.0) - 100.0 и 0.0 это координаты x1 и y1?
Рyslan вне форума  
 
Непрочитано 31.01.2009, 14:10
#128
Donhuan

Проектировщик СС
 
Регистрация: 24.06.2008
Минск
Сообщений: 134
<phrase 1=


(getpoint "запрос") возвращает кординаты указаной очки.
(getpoint '(x y z) "запрос") возвращает кординаты точки, рисует "резиновую" нить от указанной точки.
Donhuan вне форума  
 
Непрочитано 31.01.2009, 14:16
#129
Рyslan


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


(setq P1 (getpoint '(list x1 y1) "\nНачальная точка:")) так я так и делал.
Рyslan вне форума  
 
Непрочитано 31.01.2009, 15:01
#130
Donhuan

Проектировщик СС
 
Регистрация: 24.06.2008
Минск
Сообщений: 134
<phrase 1=


'(list x y) -> это '(list x y)
(list x y)-> '(x y)
Чувствуешь разницу?
Donhuan вне форума  
 
Непрочитано 31.01.2009, 15:45
#131
Рyslan


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


ввел вот так (setq P1 (getpoint '(x1 y1) "\nНачальная точка:"))
Автокад пишет - ; ошибка: неверный тип аргумента: 2D/3D точка: (X1 Y1)
Рyslan вне форума  
 
Непрочитано 31.01.2009, 16:38
#132
Donhuan

Проектировщик СС
 
Регистрация: 24.06.2008
Минск
Сообщений: 134
<phrase 1=


Тебе ж писал ShaggyDoc, что переменые до использования должны быть определены.

Функция (getpoint) возвращает кординаты точки, например '(10 10 0), что ты будешь с ними делать зависит от тебя. Если ты имел в виду, что в x1 должна автоматом попасть координата x, а в y1 - y, то это не так.

Код:
[Выделить все]
((lambda (x) (setq x1 (car x)
                         y1 (cadr x)
                  )
  )
  (getpoint "\nInput point : ")
)
После этого в x1 y1 у тебя будут содержаться соответственно x и y введенной точки.

P.S. И вообще:
'(x1 y1)->'(x1 y1), чтобы получить точку надо определить x1 и y1, а затем использовать (list x1 y1). Знак '(...) запрещает вычисление стоящей за ним функции и эквивалентен (quote (...)), см. справку.
В свою очередь функция (list [] ...) формирует список из аргументов.

Последний раз редактировалось Donhuan, 31.01.2009 в 16:47.
Donhuan вне форума  
 
Непрочитано 31.01.2009, 17:47
#133
ShaggyDoc

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


Рyslan, срочно садись за азбуку. Выделяешь getpoint и жмешь Ctrl+F1. И внимательно изучаешь описание функции.

Если тебе надо получить в переменную с именем P1 значение начальной точки, то надо (setq P1 (getpoint "\nНачальная точка: ")) - без всяких (list x1 y1). Если потом, на кой-то черт, понадобится разделить эту точку (список) на её ординаты, то сделаешь (setq x1 (car p1) y1 (cadr p1))

Но и этого (значений отдельных ординат) в твоей задаче вообще не надо. Любые точки от известной можно получить функцией polar.

Жми F1 почаще.
ShaggyDoc вне форума  
 
Непрочитано 31.01.2009, 20:49
#134
Рyslan


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


Пробовал я использовать Polar, ничерта не получается, в декартовых координатах проще посчитать. А этот Polar, насколько я понял расстояние между точками задает и угол между расстоянием и проекцией на ось икс. а где я возьму расстояние, тем более оно не точное. ну квадрат я так нарисовал, а дальше чота никак. Да есть у меня книженция, туда и смотрю. примеров маловато только
Рyslan вне форума  
 
Непрочитано 01.02.2009, 06:24
#135
ShaggyDoc

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


Цитата:
Пробовал я использовать Polar, ничерта не получается, в декартовых координатах проще посчитать
А у всех получается. Вот твой отвод (элементарнейший рисунок), он что - всегда в одном положении будет?

Ось трубы, к которой приделывается отвод, может быть направлена под любым углом. Сам отвод может быть направлен влево и вправо, вперед и назад. Может быть с разными центральными углами и с разными радиусами. Да и рисовать его надо полилинией с дугами.

Начинать надо на бумажке. Набросай эскиз - под углом, проставь номера точек и прикинь, как высчитать координаты всех точек, если известна координата начальной точки и направление трассы. А вот направление запрашивать надо обязательно. Потом выяснить - в какую сторону направить. Радиус и диаметр как раз спрашивать незачем - это могут быть аргументы функции рисования.
ShaggyDoc вне форума  
 
Непрочитано 01.02.2009, 09:33
#136
Рyslan


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


ты правильно все говоришь, я так и хочу сделать.
Рyslan вне форума  
 
Непрочитано 03.02.2009, 14:47
#137
Рyslan


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


ShaggyDoc, вроде разобрался с polar. Построил отвод в одном положении. А вот как его сориентировать? И потом, у меня там углы постоянные. Какая то зависимость наверное должна быть от начального угла привязки и углов отвода, хммм

(defun C:OTV (/ P1 P2 P3 P4 P5 P6 D Rdug)

(initget 7)

(setq P1 (getpoint "\nНачальная точка:"))


(setq D (getdist "\nДиаметр отвода:"))
(setq Rdug (getdist "\nРадиус отвода:"))



(setq Rv (- Rdug (* 0.5 D)))
(setq Rn (+ Rdug (* 0.5 D)))
(setq Dist1 (sqrt (* 2 Rv Rv)))
(setq Dist2 (sqrt (* 2 Rn Rn)))


(setq P2 (polar P1 (* 0.5 pi) (* 0.5 D)))
(setq P3 (polar P2 (* 0.25 pi) Dist1))
(setq P4 (polar P3 0 (* 0.5 D)))
(setq P5 (polar P4 0 (* 0.5 D)))
(setq P6 (polar P5 (* 1.25 pi) Dist2))



(Command "_.PLine" P1 P2 "_A" "_R" Rv P3 "_L" P5 "_A" "_R" Rn "_ANG" -90 P6 "_L" P1 "_A" "_R" Rdug P4 "" "_E")

(command "_.zoom" "_e")
(princ)
)
Рyslan вне форума  
 
Непрочитано 03.02.2009, 20:52
#138
ShaggyDoc

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


Рyslan, вот я тебе сейчас книгу "САПР на базе AutoCAD - как это делается" буду индивидуально пересказывать?

У тебя ведь программа даже в первом приближении далека от рабочего вида, начиная с первой и заканчивая предпоследней строкой.

Может, всё-таки согласишься литературу почитать? Я конечно могу прямо сюда воткнуть рабочий код для рисования любых отводов. Вот в 2D:

Код:
[Выделить все]
(ru-pipe-draw-any (quote ru-pipe-turn-bend)(list 100.0 150.0 90.0) "Начало отвода" "Направление центрального угла")
Вот в 3D:

Код:
[Выделить все]
(ru-3d-pipe-turn-by-vertex-std  108.0 4.0 150.0 90.0)
Но у тебя же еще больше вопросов будет? Так что читай...
ShaggyDoc вне форума  
 
Непрочитано 05.02.2009, 13:18
#139
Рyslan


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


лучше б готовый код сюда воткнул, я б на месяц затих, разбирая его. а так даешь заголовок функции и мучайся с ним. кстати в книге тоже не особо много примеров...еееэээхххх
Рyslan вне форума  
 
Непрочитано 05.02.2009, 13:43
#140
ShaggyDoc

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


Цитата:
Сообщение от Рyslan Посмотреть сообщение
лучше б готовый код сюда воткнул, я б на месяц затих, разбирая его. а так даешь заголовок функции и мучайся с ним. кстати в книге тоже не особо много примеров...еееэээхххх
Что, все 1662 исходника LISP уже изучил?
ShaggyDoc вне форума  
Ответ
Вернуться   Форум DWG.RU > Программное обеспечение > Программирование > LISP > Подскажите, существуют ли практические руководства по Lisp?