Đến nội dung


Hình ảnh
* * * - - 17 Bình chọn

Hỏi về Lisp (thuật toán, ý tưởng, coding,...)


  • Please log in to reply
2849 replies to this topic

#901 mr.nguyen08ql

mr.nguyen08ql

    biết lệnh text

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

Đã gửi 22 September 2011 - 11:45 AM

hihi :) laij làm phiền các bác nữa roay ! Em tìm hiểu về các vòng lặp cơ bản mà thấy khó hiểu quá, các bác giúp em giải thích về hàm : REPEAT ,WHILE nhé, ví dụ em có code sau :

(setq M 10 N4)
(repeat 10
(setq M(+ 2 M))
(setq N(+ 5 N))
)
thì mình hiểu sao khi kết quả trả về sao 10 lần lặp của N=54, M= 30
  • 0

#902 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 22 September 2011 - 11:54 AM

hihi :) laij làm phiền các bác nữa roay ! Em tìm hiểu về các vòng lặp cơ bản mà thấy khó hiểu quá, các bác giúp em giải thích về hàm : REPEAT ,WHILE nhé, ví dụ em có code sau :


(setq M 10 N4)
(repeat 10
(setq M(+ 2 M))
(setq N(+ 5 N))
)
thì mình hiểu sao khi kết quả trả về sao 10 lần lặp của N=54, M= 30

Hàm repeat: số vòng lặp cố định
Hàm while: số vòng lặp phụ thuộc điều kiện đưa vào sau (while (điều_kiện)
Nếu (điều_kiện) => T thì còn lặp, nếu nil thì hết lặp.
Ngoài ra còn có foreach nữa.
Sửa lại thế này chứ

(defun C:CC()
(setq M 10 N 4)
(repeat 10
(setq M (+ 2 M))
(setq N (+ 5 N))
))

  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#903 mr.nguyen08ql

mr.nguyen08ql

    biết lệnh text

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

Đã gửi 22 September 2011 - 12:08 PM

Hàm repeat: số vòng lặp cố định
Hàm while: số vòng lặp phụ thuộc điều kiện đưa vào sau (while (điều_kiện)
Nếu (điều_kiện) => T thì còn lặp, nếu nil thì hết lặp.
Ngoài ra còn có foreach nữa.
Sửa lại thế này chứ


(defun C:CC()
(setq M 10 N 4)
(repeat 10
(setq M (+ 2 M))
(setq N (+ 5 N))
))

bác giải thích cách tính của vòng lặp REPEAT giúp em, vd trên thì vòng lặp trả về N= 54 , M= 30, sao lại tính đc vậy ahm.:)
  • 0

#904 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 22 September 2011 - 12:29 PM

bác giải thích cách tính của vòng lặp REPEAT giúp em, vd trên thì vòng lặp trả về N= 54 , M= 30, sao lại tính đc vậy ahm. :)

Theo VD trên ta lặp 10 lần.
Lúc đầu m=10
Lặp lần 1 ta có m1=m+2=10+2=12
Lặp lần 2 ta có m2=m1+2=12+2=14 (vì lúc này m=12 rồi chứ không còn m=10 nữa)
Lặp lần 3 ta có m3=m2+2=14+2=16
...
Lặp lần 10 ta có m=m9+2=28+2=30
Tương tự với n.
Thân thương!
  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#905 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 22 September 2011 - 05:42 PM

Hàm repeat: số vòng lặp cố định
Hàm while: số vòng lặp phụ thuộc điều kiện đưa vào sau (while (điều_kiện)
Nếu (điều_kiện) => T thì còn lặp, nếu nil thì hết lặp.
Ngoài ra còn có foreach nữa.

Hàm While chạy liên tục khi kiểm tra biểu thức Khác nil (không nhất thiết biểu thức phải trả về T, tức không nhất thiết phải là 1 biểu thức boolean), và dừng lại khi biểu thức bằng Nil
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#906 quan08

quan08

    biết vẽ pline

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

Đã gửi 22 September 2011 - 10:58 PM

Nhờ các bác giải thích ý nghĩa của 2 dòng này giúp e:
1.(setq kc (/ (- (distance pd pc) d) (- n 1)))
2.(command ".donut" 0 d pd c^)
Chân thành cảm ơn trước.
  • 0

#907 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 22 September 2011 - 11:11 PM

Nhờ các bác giải thích ý nghĩa của 2 dòng này giúp e:
1.(setq kc (/ (- (distance pd pc) d) (- n 1)))
2.(command ".donut" 0 d pd c^)
Chân thành cảm ơn trước.

1). Đặt biến kc bằng (khoảng cách từ điểm pd đến pc) trừ đi giá trị d, sau đó chia cho (n trừ 1).
2). Vẽ 1 Donut có đường kính trong là 0, đường kính ngoài là d, điểm tâm là pd (c^ tương ứng enter).
Thân thương!
  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#908 quan08

quan08

    biết vẽ pline

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

Đã gửi 23 September 2011 - 09:06 AM

1). Đặt biến kc bằng (khoảng cách từ điểm pd đến pc) trừ đi giá trị d, sau đó chia cho (n trừ 1).
2). Vẽ 1 Donut có đường kính trong là 0, đường kính ngoài là d, điểm tâm là pd (c^ tương ứng enter).
Thân thương!

Cảm ơn bác nhiều nhờ bác giải thích giùm e dòng bôi đen dưới đây với:
(command ".donut" 0 d (polar pc (+ a (* pi 0.75)) d) c^)
  • 0

#909 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 23 September 2011 - 09:18 AM

@quan08 : Dòng bôi đen : = (pi * 0,75) = 3/4 pi. Số Pi được lisp mặc định như số pi ta đang dùng để tính toán hình học giải tích (trừ khi bị định nghĩa lại ^^)
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#910 quan08

quan08

    biết vẽ pline

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

Đã gửi 23 September 2011 - 07:35 PM

@quan08 : Dòng bôi đen : = (pi * 0,75) = 3/4 pi. Số Pi được lisp mặc định như số pi ta đang dùng để tính toán hình học giải tích (trừ khi bị định nghĩa lại ^^)

E vẫn chưa hiểu,dòng lệnh này vẽ 1 donut đường kính trong 0 đường kính ngoài d,dòng sau hiểu như thế nào vậy bác.Mong bác chỉ giúp.Thanks.
  • 0

#911 phamngoctukts

phamngoctukts

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 1107 Bài viết
Điểm đánh giá: 696 (tốt)

Đã gửi 23 September 2011 - 08:21 PM

Chào các bác,e đang tìm hiểu về lisp,e hiểu code sau như thế này:
a1 (list (+ (car p1) a) (+ (cadr p1)) là tọa độ điểm a1 theo phương X là p1+a,theo phương Y là p1+b Nhứng khi viết như thế này thì hiểu ra sao:
(command ".rectangle" p1 (list (+ (car p1) a) (+ (cadr p1) ))
Cảm ơn các bác.

Tức là vẽ cái rectang với cạnh là a và b
  • 0
Tất cả vì sự phát triển của diễn đàn ...
Cám ơn đừng nói lời suông mà hãy nhấn Hình đã gửi!

#912 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 5447 Bài viết
Điểm đánh giá: 2624 (tuyệt vời)

Đã gửi 23 September 2011 - 09:38 PM

E vẫn chưa hiểu,dòng lệnh này vẽ 1 donut đường kính trong 0 đường kính ngoài d,dòng sau hiểu như thế nào vậy bác.Mong bác chỉ giúp.Thanks.

Vẽ 1 donut ta cần:
1) Đường kính trong, là 0, đã OK
2) Đường kính ngoài, là d, đã OK
3) Tâm của donut, chính là (polar pc (+ a (* pi 0.75)) d)
4) Chương trình mặc định cho ta vẽ nhiều donut liên tục, nếu dùn ^C hoặc "" thì chương trình sẽ dừng lại.
Còn (polar pc (+ a (* pi 0.75)) d) nghĩa là: tạo 1 điểm bằng hệ toạ độ cực, bằng cách lấy điểm pc làm gốc, với góc lệch so với trục x là (+ a (* pi 0.75)), và cách pc một khoảng cách bằng d.
OK?
  • 1

* Chỉ nên yêu cầu Lisp khi bạn làm việc đó mất cả ngày nhưng họ chỉ viết 1 giờ. Đừng nêu yêu cầu Lisp khi bạn chỉ làm 1 giờ nhưng bắt họ phải mất cả ngày.

* Nhờ viết lisp cũng như đi khám bệnh. Chỉ gởi căn cước và than sắp chết thì không bác sỹ nào cứu sống được.


#913 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 23 September 2011 - 09:41 PM

E vẫn chưa hiểu,dòng lệnh này vẽ 1 donut đường kính trong 0 đường kính ngoài d,dòng sau hiểu như thế nào vậy bác.Mong bác chỉ giúp.Thanks.

Bạn chỉ bôi đen có mấy chữ đó, nên mình giải thích vậy thôi
Để hiểu được, tốt nhất bạn nên đánh thử command donut xem nó yêu cầu những cái gì ?
Mình nói luôn với dòng này, lần sau nếu gặp trường hợp tương tự bạn không bỡ ngỡ nữa
- Command donut cần bạn nhập vào 3 yếu tố
1. Bán kính trong -> trong dòng lisp là 0
2. Bán kính ngoài -> trong dòng lisp là d
3. Điểm đặt -> trong dòng lisp là đoạn (polar pc (+ a (* pi 0.75)) d)

Đến đây bạn lại phải nghiên cứu hàm polar để biết vấn đề (Hàm xác định điểm mới dựa vào hướng + khoảng cách so với 1 điểm đã biết)
Ở đây điểm đã biết là pc hướng (góc) = (+ a (*pi 0.75))
Khoảng cách d
  • 1

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#914 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 23 September 2011 - 09:44 PM

Cảm ơn bác nhiều nhờ bác giải thích giùm e dòng bôi đen dưới đây với:
(command ".donut" 0 d (polar pc (+ a (* pi 0.75)) d) c^)

Vẽ donut đường kính trong 0 đường kính ngoài d. Đoạn (polar pc (+ a (* pi 0.75)) d) dùng xác định điểm tâm vẽ donut bằng cách từ điểm pc di chuyển theo phương hợp với phương ngang một góc có giá trị a cộng với pi nhân0.75 khoảng cách di chuyển là d. Trong hàm polar thì góc tính bằng radian pi=180 độ.
  • 1

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#915 quan08

quan08

    biết vẽ pline

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

Đã gửi 23 September 2011 - 10:32 PM

Cảm ơn các bác nhiều,cho e phiền các bác 1 lần nữa,giải thích giùm e dòng này:
(setq a1 (angle pa pb)
  • 0

#916 duy782006

duy782006

    PHẠM QUỐC DUY

  • CADViet Team
  • PipPipPipPipPipPipPip
  • 2155 Bài viết
Điểm đánh giá: 1360 (rất tốt)

Đã gửi 23 September 2011 - 11:35 PM

Cảm ơn các bác nhiều,cho e phiền các bác 1 lần nữa,giải thích giùm e dòng này:
(setq a1 (angle pa pb)

Gán cho a1 giá trị góc đo hợp bởi đường thẳng từ điểm pa đến điểm pb với phương ngang. Giá trị trả về tính theo radian.
  • 1

Cứ ngỡ trần gian là cõi thật.Cho nên tất bật đến bây giờ.
Tạo hộp thoại bằng lisp My blog QUY ĐỊNH ĐẶT TÊN TOPIC TRONG CHUYÊN MỤC LISPD http://ktsduy.wordpress.com/
Để cám ơn chỉ cần nhấn rep_up.png
(Là nhấn vào nút đó phía bài viết của người ta í chứ đừng có nhè cái hình này mà nhấn miết đi nha :-D


#917 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 24 September 2011 - 08:43 AM

Cảm ơn các bác nhiều,cho e phiền các bác 1 lần nữa,giải thích giùm e dòng này:
(setq a1 (angle pa pb)

@quan08 : tất cả các hàm bạn hỏi đều có cả ví dụ lẫn cách dùng trong Help , tại sao bạn không dùng và tìm hiểu ? Mình không phản ứng việc hỏi, tuy nhiên, hỏi trước khi tìm hiểu lại là cách thức bị động vô cùng. Cứ như thế này thì 1 lisp đơn giản bạn cũng mất hàng chục bài để hỏi th
  • 0

Thành viên nhóm CadMagic.
Mời bạn ghé thăm facebook nhóm - Page viết lisp theo yêu cầu  :
CAD MAGIC


#918 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 24 September 2011 - 11:21 AM

Chào các bác,e đang tìm hiểu về lisp,e hiểu code sau như thế này:
a1 (list (+ (car p1) a) (+ (cadr p1)) là tọa độ điểm a1 theo phương X là p1+a,theo phương Y là p1+b Nhứng khi viết như thế này thì hiểu ra sao:
(command ".rectangle" p1 (list (+ (car p1) a) (+ (cadr p1) ))
Cảm ơn các bác.

Hề hề hề,
(command ".rectangle" p1 (list (+ (car p1) a) (+ (cadr p1) c)))
Cái ni được hiểu nôm na như sau:
1/- Đoạn lisp này gọi lệnh ".rectangle" trong CAD và thực thi theo yêu cầu của lệnh này.
2/- Lệnh ".rectangle" trong Cad yêu cầu hai đối số là hai điểm xác định tọa độ của hai đầu đường chéo Hình chữ nhật được tạo. Vậy nên sau khi gọi lệnh lisp phải nhập thêm 2 điểm nữa mà điểm đầu là p1, điểm thứ hai là được xác định phụ thuộc vào p1 theo hàm (list (+ (car p1) a) (+ (cadr p1) c))
3/- Và do hiểu vậy nên lisp sẽ tạo ra một hình chữ nhật với độ dài hai cạnh theo các trục x,y là a,c. Điểm bắt đầu vẽ là p1.

Hề hề hề,
Vài câu nôm na, hy vọng bạn sẽ hiểu đú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.

#919 Thaistreetz

Thaistreetz

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 903 Bài viết
Điểm đánh giá: 505 (tốt)

Đã gửi 29 September 2011 - 06:13 PM

Get the last command.
Mình đang cần lấy chuỗi tên lệnh cuối cùng đã nhập trong dòng lệnh mà mò mãi chưa ra. Có bác nào có nhu cầu này chưa?
Có 2 cách hiểu lệnh cuối cùng, ví dụ: ta viết 1 code lisp có tên lệnh là (defun C:AA chẳng hạn) rồi gõ lệnh AA để chạy lệnh này
- Lệnh cuối cùng là lệnh trước khi ta chạy lệnh AA. (Mình cần thằng này)
- Lệnh cuối cùng chính là lệnh AA. (thằng này không phải là thằng mình cần, nhưng có cũng tốt, có thể sẽ có ứng dụng hay ho cho nó)
  • 0

Hình đã gửi
IN HIM, I TRUST. THE TRUST IN MY GOD


#920 npham

npham

    biết lệnh rotate

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

Đã gửi 29 September 2011 - 10:52 PM

Get the last command.
Mình đang cần lấy chuỗi tên lệnh cuối cùng đã nhập trong dòng lệnh mà mò mãi chưa ra. Có bác nào có nhu cầu này chưa?
Có 2 cách hiểu lệnh cuối cùng, ví dụ: ta viết 1 code lisp có tên lệnh là (defun C:AA chẳng hạn) rồi gõ lệnh AA để chạy lệnh này
- Lệnh cuối cùng là lệnh trước khi ta chạy lệnh AA. (Mình cần thằng này)
- Lệnh cuối cùng chính là lệnh AA. (thằng này không phải là thằng mình cần, nhưng có cũng tốt, có thể sẽ có ứng dụng hay ho cho nó)


Căng hè ! Có phải là cái thao tác cuối cùng gõ lên dòng lệnh không?
Nếu vậy thì bác thử : (getvar "LASTPROMPT")

Còn cái trước cái "lastprompt" thì .... để ngâm cứu tiếp coi.
  • 1