Đến nội dung


Hình ảnh
5 stars - based on 24598 reviews
* * * - - 3 Bình chọn

Hướng dẫn lập trình Lisp


  • Please log in to reply
493 replies to this topic

#101 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6017 Bài viết
Điểm đánh giá: 3118 (tuyệt vời)

Đã gửi 09 May 2009 - 01:38 PM

BÁC SSG ơi em theo chân bác cũng kha kha rồi. Em xin hỏi cách nào để biết kiểm tra trương trình của minh viết sai ko nhi?
cách cho môt dòng lệnh chay thử như thế nào?
Bác giúp em với hoặc anh em nào biết giúp cái nhé!

Chào bạn Tiger99,
Bạn soạn lisp trên notepad phải không? Như vậy cách duy nhất là truy tìm thủ công thôi bạn ạ. Mình biết có một số phần mềm chuyên dùng cho lập trình có thể giúp bạn kiểm soát lỗi cú pháp khi viết. Với lisp thì bạn có thể dùng notepad++ bạn ạ. Tuy nhiên mình cũng chưa xài nó nên chưa biết rõ lắm, chỉ mới nghe như vậy. Bạn thử tìm hiểu xem.
Còn một cách khác là bạn vào diễn đàn post đoạn lisp đó trong khung
 ....
. Cách này hơi nhiêu khê mà đôi khi cũng không chuẩn lắm.
Để chạy thử một dòng code lisp bạn có hai cách như sau:
- Dùng debug
- Nhập thẳng đoạn code đó vào dònh lệnh command của cad rồi nhấn enter.
Chúc bạn vui và thành công
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#102 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6017 Bài viết
Điểm đánh giá: 3118 (tuyệt vời)

Đã gửi 09 May 2009 - 01:41 PM

BÁC SSG ơi em theo chân bác cũng kha kha rồi. Em xin hỏi cách nào để biết kiểm tra trương trình của minh viết sai ko nhi?
cách cho môt dòng lệnh chay thử như thế nào?
Bác giúp em với hoặc anh em nào biết giúp cái nhé!

Chào bạn Tiger99,
Bạn soạn lisp trên notepad phải không? Như vậy cách duy nhất là truy tìm thủ công thôi bạn ạ. Mình biết có một số phần mềm chuyên dùng cho lập trình có thể giúp bạn kiểm soát lỗi cú pháp khi viết. Với lisp thì bạn có thể dùng notepad++ bạn ạ. Tuy nhiên mình cũng chưa xài nó nên chưa biết rõ lắm, chỉ mới nghe như vậy. Bạn thử tìm hiểu xem.
Còn một cách khác là bạn vào diễn đàn post đoạn lisp đó trong khung
 ....
bằng cách sử dụng các mã "[" code "]" ở đầu chương trình và các mã "["/code"]" ở cuối chương trình. Cách này hơi nhiêu khê mà đôi khi cũng không chuẩn lắm.
Để chạy thử một dòng code lisp bạn có hai cách như sau:
- Dùng debug
- Nhập thẳng đoạn code đó vào dònh lệnh command của cad rồi nhấn enter.
Chúc bạn vui và thành cống
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#103 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

  • Moderator
  • PipPipPipPipPipPipPip
  • 4328 Bài viết
Điểm đánh giá: 3830 (đỉnh cao)

Đã gửi 09 May 2009 - 02:22 PM

Chào bạn Tiger99,
Bạn soạn lisp trên notepad phải không? Như vậy cách duy nhất là truy tìm thủ công thôi bạn ạ. Mình biết có một số phần mềm chuyên dùng cho lập trình có thể giúp bạn kiểm soát lỗi cú pháp khi viết. Với lisp thì bạn có thể dùng notepad++ bạn ạ. Tuy nhiên mình cũng chưa xài nó nên chưa biết rõ lắm, chỉ mới nghe như vậy. Bạn thử tìm hiểu xem.
Còn một cách khác là bạn vào diễn đàn post đoạn lisp đó trong khung

 ....
bằng cách sử dụng các mã "[" code "]" ở đầu chương trình và các mã "["/code"]" ở cuối chương trình. Cách này hơi nhiêu khê mà đôi khi cũng không chuẩn lắm.
Để chạy thử một dòng code lisp bạn có hai cách như sau:
- Dùng debug
- Nhập thẳng đoạn code đó vào dònh lệnh command của cad rồi nhấn enter.
Chúc bạn vui và thành cống

Bạn đọc thêm bài viết này :

Em dùng VL editor từ khi bắt đầu học viết lisp. Và thấy nó có đầy đủ các chức năng, biên dịch, gỡ rối, check value ...và đặc biệt là cả tự động format (định dạng các funtion theo indent để dễ nhìn, dễ sửa) Em thấy dùng VL đối với coding lisp là khá hoàn thiện và đầy đủ đấy chứ (nếu biết các dùng và các phím tắt nữa). Từ việc sắp xếp các cửa sổ (khi mở VL ra lần đầu, bao giờ CAD cũng tự động sắp xếp để thuận tiện nhất cho ng lập trình) Đây là hình cửa sổ em vẫn hay dùng:
Hình đã gửi
Sử dụng VL thành thạo cũng giúp cho việc coding nhanh hơn.

http://www.cadviet.c...amp;#entry32931
  • 0

#104 VoHoan

VoHoan

    biết lệnh move

  • Members
  • PipPipPip
  • 129 Bài viết
Điểm đánh giá: 8 (bình thường)

Đã gửi 09 June 2009 - 11:31 AM

Em đang học cách viết list nên có nhiều lệnh chưa hiểu được mong các bác giúp đỡ. Nhờ các bác đọc list này rồi chỉ cho em tác dụng và cú pháp của các lệnh nay với nhé:
cons
foreach
vl-sort
lambda
(vl-load-com)

Luôn tiện đây cho em hỏi cách đưa nội dung list lên bài viết để mà vẫn giữ được màu các câu lệnh.
Cảm ơn nhiều!

;*****************************
(defun c:cdt (/ sst lstent egoc pgoc xgoc yht zgoc linespc ee tt)
(if (not tyledong)
(setq tyledong 1.5)
)
(princ "\nC¨n kho¶ng c¸ch dßng text")
(setq sst (ssget '((0 . "TEXT")))
lstent (ss2ent sst)
tmp (getreal (strcat "\nVµo tØ lÖ kho¶ng c¸ch dßng <" (rtos tyledong 2 2) ">: "))
tyledong (cond (tmp tmp) (t tyledong))
lstent (vl-sort lstent '(lambda (e1 e2) (> (cadr (cdr (assoc 10 (entget e1))))
(cadr (cdr (assoc 10 (entget e2)))))))
egoc (car lstent)
lstent (cdr lstent)
pgoc (cdr (assoc 10 (entget egoc)))
xgoc (car pgoc)
yht (cadr pgoc)
zgoc (caddr pgoc)
hgoc (cdr (assoc 40 (entget egoc)))
linespc (* hgoc (+ 1.0 tyledong))

)
(foreach ee lstent
(setq tt (entget ee)
tt (subst (list 10 xgoc (setq yht (- yht linespc)) zgoc) (assoc 10 tt) tt)
)
(entmod tt)
(entupd ee)
)
(princ)
)

;-------------------------------

(defun ss2ent (ss / sodt index lstent)
(setq
sodt (cond (ss (sslength ss)) (t 0))
index 0
)
(repeat sodt
(setq ent (ssname ss index)
index (1+ index)
lstent (cons ent lstent)
)
)
(reverse lstent)
)
(vl-load-com)
  • 0

#105 q288

q288

    biết lệnh fillet

  • Members
  • PipPipPipPip
  • 209 Bài viết
Điểm đánh giá: 164 (tàm tạm)

Đã gửi 09 June 2009 - 06:19 PM

Em đang học cách viết list nên có nhiều lệnh chưa hiểu được mong các bác giúp đỡ. Nhờ các bác đọc list này rồi chỉ cho em tác dụng và cú pháp của các lệnh nay với nhé:
cons
foreach
vl-sort
lambda
(vl-load-com)

Luôn tiện đây cho em hỏi cách đưa nội dung list lên bài viết để mà vẫn giữ được màu các câu lệnh.
Cảm ơn nhiều!


* (vl-load-com) để load các hàm visual lisp, là các hàm có chữ đứng trước là vl- vlax- vla- vlr- .

* cons để ghép 1 phần tử vào đầu 1 list, kết quả trả về 1 list mới.
Td: (cons "a" (list "b" "c" "d")) -> ("a" "b" "c" "d")
hoặc nối 2 phần tử để tạo 1 list.
Td: (cons "a" "b") -> ("a" . "b") . List kiểu này gọi là dotted pairs vì có dấu chấm đứng giữa.

* foreach là vòng lặp ứng với từng phần tử của list.
Td: (foreach a (list 1 2 3) (print a)) -> in ra 1 2 3
Tức là ứng với mỗi ptử (đặt tên là a) thì (print a).

* vl-sort là để sắp xếp 1 list theo thứ tự nào đó do hàm lambda (hàm tạm) hoặc các hàm của lisp định nghĩa.
Td: (vl-sort (list 5 4 7 8 9 2 3) '<) -> (2 3 4 5 7 8 9) sắp xếp theo thứ tự tăng dần.

Muốn đưa nội dung list lên bài viết để mà vẫn giữ được màu các câu lệnh, thì xem phần Trợ giúp BB code ở mục code và codebox.
  • 1

#106 ndtnv

ndtnv

    biết lệnh divide

  • Members
  • PipPipPipPipPipPip
  • 441 Bài viết
Điểm đánh giá: 395 (khá)

Đã gửi 12 June 2009 - 01:18 PM

Truyền tham số cho hàm bằng tham chiếu (by reference)
* Mục đích: thay đổi giá trị của biến khi gọi chương trình con
Để biết cách dùng, tôi xin đưa ra 1 VD
Hàm này để người dùng nhập vào 1 số nguyên n, nếu n chưa có giá trị, sẽ lấy giá trị default.
nếu n có rồi thì lấy trị này làm trị default khi user nhấn enter.
Đây là VD để minh họa cho cách dùng tham biến, còn ưu điểm của cách dùng tham biến chỉ thể hiện rõ ràng khi truyền nhiều tham biến cho hàm, hoặc hàm này gọi thêm các hàm con khác nưã.
(vl-load-com)
(defun mygetint(isym msg def / s n1 n2)
(setq s (if msg msg (strcat "\nNhap so nguyen " (vl-symbol-name isym))))
(setq n2 (eval isym) n1 (if n2 n2 def))
;(setq n2 (eval isym) n1 (if (= (type n2) 'INT) n2 def))
(setq n2 (getint (strcat s " <" (itoa n1) ">:")))
(set isym (if n2 n2 n1))
)

Giải thích code:
- (vl-symbol-name isym) : trả về tên của symbol isym (uppercase)
- (eval isym) : lấy giá trị của isym
- (set isym (if n2 n2 n1)) : gán giá trị cho isym
- Khi truyền tham số bằng tham chiếu, đặt 1 dấu nhấy đơn vào trước tên biến
- Dòng code comment dùng cho ai đặt tên biến toàn cục không thống nhất, lúc dùng int, lúc dùng real ..

3 VD về cách dùng hàm mygetint:
(mygetint 'n nil 0) 
(mygetint 'row "\nNhap so hang" 5)
(setq col 4) (mygetint 'col "\nNhap so cot" 10)
Tương tự như vậy, các bạn có thể viết hàm mygetreal ....
  • 0

#107 q288

q288

    biết lệnh fillet

  • Members
  • PipPipPipPip
  • 209 Bài viết
Điểm đánh giá: 164 (tàm tạm)

Đã gửi 12 June 2009 - 02:18 PM

Cho mình hỏi một điều :
Ở các ngôn ngữ khác như C++, Java thường có trường hợp có nhiều hàm cùng tên nhưng có số đối số khác nhau.
Td
MyFunc ( a )
MyFunc ( a c)
MyFunc ( a b c)

Trong lisp thì không có chuyện đó, nhưng các hàm của lisp đều có thể nhận số đối số khác nhau.
Td:
(rtos 1.234)
(rtos 1.234 2)
(rtos 1.234 2 1)
CAD đều chấp nhận đc cả.

Có thể là các hàm đó đc viết bằng ngôn ngữ khác, nhưng xin hỏi có cách nào mà hàm do người dùng định nghĩa làm đc như vậy ko?
  • 0

#108 hoangkh

hoangkh

    biết zoom

  • Members
  • Pip
  • 12 Bài viết
Điểm đánh giá: 1 (bình thường)

Đã gửi 11 July 2009 - 12:20 AM

Tổng kết: Bạn cần hiểu rõ và biết áp dụng tất cả các hàm đã liệt kê ở Summary.
Vậy Summary là cái gì, em muốn tìm để học từ đầu, đừng cười em vì em không biết về lập trình nên không hiểu được các câu lệnh
  • 0

#109 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1088 (rất tốt)

Đã gửi 14 July 2009 - 07:46 AM

Tổng kết: Bạn cần hiểu rõ và biết áp dụng tất cả các hàm đã liệt kê ở Summary.
Vậy Summary là cái gì, em muốn tìm để học từ đầu, đừng cười em vì em không biết về lập trình nên không hiểu được các câu lệnh

Summary nghĩa là "tóm lược", "tóm tắt", "toát yếu"... Ở cuối mỗi đoạn code ví dụ, ssg nêu cái "summary" để các bạn mới làm quen với lisp biết được những điều cơ bản tối thiểu cần nắm vững. Chẳng hạn, sau bài đầu tiên có đoạn:

;;;SUMMARY: setq, getreal, getpoint, polar, list, car, cadr, caddr, + - * /, command, comment, getvar, setvar, princ

Nghĩa là: bạn cần phải hiểu và biết áp dụng "setq", "getreal", "getpoint"... "princ".
Chỉ cần từng ấy thôi bạn đã có thể lập được một số chương trình ứng dụng hữu ích. Khi đã thuần thục những cái nêu trên, bạn sẽ tìm hiểu thêm những cái khác. Để hiểu được chúng, như ssg đã trình bày trong bài hướng dẫn, bạn cần phải có sách: mua ở nhà sách, ebook (trên diễn đàn cũng có vài cuốn), đọc help.... Ngoài ra, bạn có thể tham khảo thêm rất nhiều lisp đã post trên diễn đàn.
Chúc bạn thành công!
  • 2

#110 tuan_thietkedien

tuan_thietkedien

    biết lệnh mirror

  • Members
  • PipPipPip
  • 153 Bài viết
Điểm đánh giá: 15 (tàm tạm)

Đã gửi 15 July 2009 - 03:19 PM

Chào mọi người,
Em muốn dùng Lísp để tác động đến Pagésetup như file đính kèm, ai biết xin chỉ giúp.
Phần windơw chọn khung bản vẽ, có cách nào để Lísp hiểu khung rectangle lớn nhất hay không?
http://www.cadviet.c...les/Book1_7.xls
Xin cám ơn.
  • 0

#111 binh80

binh80

    Chưa sử dụng CAD

  • Members
  • Pip
  • 2 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 20 July 2009 - 11:17 AM

Chào diễn đán, mònh mới đang mò mẫm viết slip trên notepat nhưng khi lưu không chuyển thành flie slip được mong các bậc tiền bối chỉ giáo mình giùm với. Thank you diễn đàn!
  • 0

#112 HoangSon614

HoangSon614

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 254 Bài viết
Điểm đánh giá: 66 (tàm tạm)

Đã gửi 20 July 2009 - 11:28 AM

Chào diễn đán, mònh mới đang mò mẫm viết slip trên notepat nhưng khi lưu không chuyển thành flie slip được mong các bậc tiền bối chỉ giáo mình giùm với. Thank you diễn đàn!

Bạn phải lưu file với đuôi là *.lsp (VD: Binh80.lsp). Chúc bạn thành công và đóng góp nhiều cho diễn đàn
  • 1

#113 binh80

binh80

    Chưa sử dụng CAD

  • Members
  • Pip
  • 2 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 20 July 2009 - 12:00 PM

Cảm ơn bạn HoangSon614 nhưng mình vẫn không lưu được mà chỉ lưu được SLP file mà không được Autoslip Application source mong bạn chỉ giáo mình với.
  • 0

#114 HoangSon614

HoangSon614

    biết lệnh properties

  • Members
  • PipPipPipPip
  • 254 Bài viết
Điểm đánh giá: 66 (tàm tạm)

Đã gửi 20 July 2009 - 12:13 PM

Cảm ơn bạn HoangSon614 nhưng mình vẫn không lưu được mà chỉ lưu được SLP file mà không được Autoslip Application source mong bạn chỉ giáo mình với.

Sao không được bạn. Sau khi viết gì đó mình không biết, rồi đặt tên ( VD: Binh80.lsp, < ở đây: binh80: tên lisp và thêm .lsp là được mà>). Chúc bạn thành công
  • 1

#115 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

  • Moderator
  • PipPipPipPipPipPipPip
  • 6017 Bài viết
Điểm đánh giá: 3118 (tuyệt vời)

Đã gửi 20 July 2009 - 03:32 PM

Cảm ơn bạn HoangSon614 nhưng mình vẫn không lưu được mà chỉ lưu được SLP file mà không được Autoslip Application source mong bạn chỉ giáo mình với.


Chào bạn Binh80,
Khi bạn đã lưu file của bạn với đuôi .lsp có nghĩa là file đó đã có thể Load application trong CAd được rồi. Nhưng nó có chạ ngon lành hay không thì phụ thuộc vào việc bạn đã viết ra sao. Để Load application nó bạn phải vào lệnh Load Application trong menu Tool của cad sau đó chỉ đường dẫn ới thư mục mà bạn đã lưu file của bạn rồi nhấn nút Load bạn nhé.

Chúc bạn thành công.
  • 0
Chúc các quý Anh trên diễn đàn luôn khỏe, đẻ thêm được nhiều thứ để mót.

#116 tomboy

tomboy

    biết vẽ polygon

  • Members
  • PipPip
  • 72 Bài viết
Điểm đánh giá: 20 (tàm tạm)

Đã gửi 14 August 2009 - 11:37 PM

Chào bạn Binh80,
Khi bạn đã lưu file của bạn với đuôi .lsp có nghĩa là file đó đã có thể Load application trong CAd được rồi. Nhưng nó có chạ ngon lành hay không thì phụ thuộc vào việc bạn đã viết ra sao. Để Load application nó bạn phải vào lệnh Load Application trong menu Tool của cad sau đó chỉ đường dẫn ới thư mục mà bạn đã lưu file của bạn rồi nhấn nút Load bạn nhé.

Chúc bạn thành công.

Nếu bạn viết lsp trong môi trường notebed thì hơi vất cho bạn đấy, bạn vào cad rồi đánh lệnh VLIDE nó sẽ vào môi trường lsp cho bạn. còn bạn không lưu vào file *.lsp được vì bạn không để trong dấu kép nháy vd "tkt.lsp" chẳng hạn.
  • 0

#117 khieuhung

khieuhung

    biết vẽ line

  • Members
  • PipPip
  • 20 Bài viết
Điểm đánh giá: 4 (bình thường)

Đã gửi 23 August 2009 - 03:06 PM

cảm ơn bác SSG nhiều em mới nhập môn đang­ loay hoay tìm tài liệu may có b­ác up bài này lên không chắc chả biết gì :bigsmile: cảm ơn bác và­ nh­ững người tâm huyết như bác mong bác :bigsmile:
  • 0

#118 hugo75

hugo75

    biết vẽ polygon

  • Members
  • PipPip
  • 72 Bài viết
Điểm đánh giá: -4 (bình thường)

Đã gửi 03 September 2009 - 12:00 PM

Cảm ơn diễn đàn rất nhiều.
  • 0

#119 chandatn

chandatn

    biết pan

  • Members
  • Pip
  • 9 Bài viết
Điểm đánh giá: 0 (bình thường)

Đã gửi 03 September 2009 - 03:29 PM

Nếu bạn viết lsp trong môi trường notebed thì hơi vất cho bạn đấy, bạn vào cad rồi đánh lệnh VLIDE nó sẽ vào môi trường lsp cho bạn. còn bạn không lưu vào file *.lsp được vì bạn không để trong dấu kép nháy vd "tkt.lsp" chẳng hạn.



Mình muốn viết 1 đoạn lisp để nó đọc các thông số như layer, linetype scale, màu của đôí tượng đó (nếu màu là by layer thì đọc màu cuả layer đó) mà không biết viết thế nào mong các bạn chỉ giáo!
  • 0

#120 ssg

ssg

    biết lệnh adcenter

  • Vip
  • PipPipPipPipPipPipPip
  • 1228 Bài viết
Điểm đánh giá: 1088 (rất tốt)

Đã gửi 04 September 2009 - 04:56 PM

Mình muốn viết 1 đoạn lisp để nó đọc các thông số như layer, linetype scale, màu của đôí tượng đó (nếu màu là by layer thì đọc màu cuả layer đó) mà không biết viết thế nào mong các bạn chỉ giáo!

1- Trước hết, bạn hãy tìm hiểu về DXF code. Để có khái niệm, mời bạn đọc bài này:
http://www.cadviet.c...tent/view/89/1/
Qua đó, bạn sẽ tự nhận biết mình còn thiếu mảng kiến thức nào và hãy tự bổ sung.

2- Nếu có thể, tìm hiểu về các functions dạng vla-get-xxxx. Chúng rất hiệu quả với các yêu cầu tương tự như của bạn.

Chúc bạn nhanh chóng làm chủ được ngôn ngữ Lisp.
  • 0