Đế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
2854 replies to this topic

#1961 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 14 October 2014 - 10:50 AM

lại 1 cao thủ nữa xài em Logan , bác Tot77 có thể nói sơ về hàm đo cho mình mót tí đc chứ ạh !

Hề hề hề,

Nói kỹ thì khó chứ còn nói sơ sơ thì đây nè:

Returns the result of the logical bitwise AND of a list of integers

(logand [int int...])

Arguments

int

An integer.

Return Values

An integer (0, if no arguments are supplied).

Examples

Command: (logand 7 15 3)

3

Command: (logand 2 3 15)

2

Command: (logand 8 3 4)


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

#1962 hiepttr

hiepttr

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1298 Bài viết
Điểm đánh giá: 518 (tốt)

Đã gửi 14 October 2014 - 10:53 AM

Cái này là bác "thay lời Cad nói" đấy chứ bác Bình :D :D :D

Em đọc đi đọc lại cái đó rồi mà vẫn còn vướng hơn gà mắc tóc đây nè ^^

:D :D :D


  • 0

Có vợ dù dữ dù hiền , bạn đều có lợi
_ Nếu vợ hiền, bạn sẽ là người đàn ông sung sướng
_ Nếu vợ dữ, bạn sẽ thành ... triết gia !

Bergson


#1963 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 14 October 2014 - 11:00 AM

Để dễ hình dung tôi lấy trường hợp hàm logand với 2 tham số mà hôm qua và hôm nay bạn hỏi.

VD: hàm (getvar "osmode") trả về bit-code của các cài đặt osnap.

Chẳng hạn, với "end" thì bit-code=1, "mid" thì bit-code=2, "cen" thì bit-code=4.

Nếu bạn setting cho osnap cả 3 tùy chọn này thì bit-code sẽ là 7 (7=1+2+4). Bit-code có tính chất "cộng".

Để kiểm tra osnap có setting "mid" hay không, bạn sử dụng hàm (= 2 (logand 2 (getvar "osmode"))), chú ý con số 2 là của "mid".

Hy vọng có hiểu!


  • 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.


#1964 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 14 October 2014 - 11:07 AM

Nôm na là thế này.

(and 1 0) -> T ;; and trả vê T hoặc nil ; cứ có 1 cái nil thì and là nil

(logand 1 0) -> 0 ;; logand trả về interger


  • 0

#1965 hiepttr

hiepttr

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1298 Bài viết
Điểm đánh giá: 518 (tốt)

Đã gửi 14 October 2014 - 11:14 AM

có thể hiểu thế này ko ah !

1. các tham số đầu vào được phân tích thành tổng của các số dạng 2^n

2. Lấy phần giao (and) của các só hạng con đó

 

???


  • 0

Có vợ dù dữ dù hiền , bạn đều có lợi
_ Nếu vợ hiền, bạn sẽ là người đàn ông sung sướng
_ Nếu vợ dữ, bạn sẽ thành ... triết gia !

Bergson


#1966 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 14 October 2014 - 11:23 AM

Lấy thí dụ như (logand 7 15 3)

7 viết theo dang nhị phân là        0111

15  viết theo dang nhị phân là     1111

3  viết theo dang nhị phân là       0011

Cộng theo cột cứ cái nào có 0 thì = 0, ta có tổng của 3 cái trên là 0011 = 3


  • 1

#1967 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 14 October 2014 - 11:27 AM

Thì trong help vẫn ghi sơ sơ vậy, mình đọc mà chẳng hiểu gì :D :D :D

and của các integer phải hiểu làm sao đây ???

 

Hề hề hề ,

Nếu muốn kỹ hơn tí nữa thì bác hieptr có thể vào đây:

http://en.wikipedia....twise_operation

 

Còn nói nôm na theo kiểu học mót của mình thì hàm này được hiểu như sau"

1/- Đổi các integer từ hệ cơ số 10 thành hệ cơ số 2.

2/- lập hàm and với các ký tự này theo cột dọc

3/- Đổi kết quả từ cơ số 2 sang cơ số 10.

Cụ thể như ví dụ của CAD:

(logand 7 15 3) =

7 =   0111

15=  1111

3=    0011

KG= 0011

Đổi sang cơ số 10 : 0011= 1*2^0 + 1*2^1 = 3

 

Hề hề hề.


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

#1968 hiepttr

hiepttr

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1298 Bài viết
Điểm đánh giá: 518 (tốt)

Đã gửi 14 October 2014 - 11:32 AM

Mình đã đc cái này:

"You have reached your quota of positive votes for the day"

Nên đành võ mồm vậy !

Cảm ơn các bác đã gỡ rối ! Vậy là cách hiểu theo kiểu "cục gạch" của mình cũng có thể cho ra kết quả đúng rồi đó ạh !


  • 0

Có vợ dù dữ dù hiền , bạn đều có lợi
_ Nếu vợ hiền, bạn sẽ là người đàn ông sung sướng
_ Nếu vợ dữ, bạn sẽ thành ... triết gia !

Bergson


#1969 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 14 October 2014 - 12:02 PM

Do LM viết theo kiểu "bác học" quá nên nhìn nó hoa cả mắt. chứ câu trên có thể viết gọn ltheo kiểu "dân dã" là:

(while (= 1 (getvar 'cmdactive))  (command pause))

 

Ở cái pause đầu tiên (tương đương với cái nhấp chọn điểm đầu tiên) thì dòng (command "pline" pause) đã chấm dứt. nhưng lệnh pline vẫn chưa dứt, khi đó lsp sẽ ngưng ở đó va lệnh pline của cad chiếm quyền điều khiển luôn.

Do dó câu sau "revcloud" không thực hiện dc là vì vậy.


  • 1

#1970 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 15 October 2014 - 02:48 PM

- mấy anh cho nhoc hỏi xíu ^^, nhoc mún vẽ mũi tên = pline mà dùng entmake thì làm cách nào đc nhỉ, nhoc mót đc hàm tạo = entmake rùi,  nhưng nhoc ko biết đưa tham số độ rộng vô cách nào,nhoc chỉ biết đc mã 40 là bắt đầu, 41 là kết thúc


  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#1971 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 15 October 2014 - 03:46 PM

Nhoc cứ vẽ tay cái mũi tên rồi entget là biết ngay mà.
  • 0

#1972 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 15 October 2014 - 04:00 PM

- nhoc thử rùi mà không hiểu, hàm entmake nhoc mót đc các điểm là tham số dạng lstpoint, nhoc thử tách ra thành từng điểm nhưng mà khi xài nó chỉ trả ra ename ^^

(defun vemuiten (pt1 pt2 pt3 closed Layer Linetype LTScale xdata w / Lst)
	(setq Lst (list '(0 . "LWPOLYLINE")'(100 . "AcDbEntity")
	(cons 8 (if Layer Layer (getvar "Clayer")))
	(cons 6 (if Linetype Linetype "bylayer"))
	(cons 48 (if LTScale LTScale 1))
	'(100 . "AcDbPolyline")
	(cons 90 (length listpoint))
	(cons 70 (if closed 1 0))
	(cons 10 pt1)
	(cons 40 0.0)
	(cons 41 w)
	(cons 42 0.0)
	(cons 91 0)
	(cons 10 pt2)
	(cons 40 0.0)
	(cons 41 0.0)
	(cons 42 0.0)
	(cons 91 0)
	(cons 10 pt3)
	(cons 40 0.0)
	(cons 41 0.0)
	(cons 42 0.0)
	(cons 91 0)))
	(if xdata (setq Lst (append lst (list (cons -3 (list xdata))))))
	(entmakex Lst))

  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#1973 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 15 October 2014 - 04:21 PM

Biến listpoint không thấy khai báo, chỉ có 3 điểm pt1 pt2 pt3, cho (cons 90 3) thì dc.


  • 0

#1974 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 15 October 2014 - 04:41 PM

- mấy anh cho nhoc hỏi xíu ^^, nhoc mún vẽ mũi tên = pline mà dùng entmake thì làm cách nào đc nhỉ, nhoc mót đc hàm tạo = entmake rùi,  nhưng nhoc ko biết đưa tham số độ rộng vô cách nào,nhoc chỉ biết đc mã 40 là bắt đầu, 41 là kết thúc

Hề hề hề,

Nhóc thử tham khảo cái ni coi sao hè???

 

(entmake '((0 . "LWPOLYLINE")  (100 . "AcDbEntity") (67 . 0)  (8 . "0") (100 . "AcDbPolyline") (90 . 4) (70 . 0) (38 . 0.0) (39 . 0.0) (10 14.6683 14.0925 ) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 14.6683 14.0925 )(40 . 0.0) (41 . 3.0) (42 . 0.0) (10 19.6683 14.0925 ) (40 . 1.0) (41 . 1.0) (42 . 0.0) (10 24.6683 14.0925 ) (40 . 1.0) (41 . 1.0) (42 . 0.0) (210 0.0 0.0 1.0)))

(entmake '((0 . "LWPOLYLINE")  (100 . "AcDbEntity") (67 . 0)  (8 . "0") (100 . "AcDbPolyline") (90 . 4) (70 . 0) (38 . 0.0) (39 . 
0.0) (10 14.6683 14.0925 ) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 14.6683 14.0925 )
(40 . 0.0) (41 . 3.0) (42 . 0.0) (10 19.6683 14.0925 ) (40 . 1.0) (41 . 1.0) (42 
. 0.0) (10 24.6683 14.0925 ) (40 . 1.0) (41 . 1.0) (42 . 0.0) (210 0.0 0.0 1.0)))
(entmake '((0 . "LWPOLYLINE")  (100 . "AcDbEntity") (67 . 0)  (8 . "0") (100 . "AcDbPolyline") (90 . 4) (70 . 0) (38 . 0.0) (39 . 
0.0) (10 14.6683 14.0925 ) (40 . 0.0) (41 . 0.0) (42 . 0.0) (10 14.6683 14.0925 )
(40 . 0.0) (41 . 3.0) (42 . 0.0) (10 19.6683 14.0925 ) (40 . 1.0) (41 . 1.0) (42 
. 0.0) (10 24.6683 14.0925 ) (40 . 1.0) (41 . 1.0) (42 . 0.0) (210 0.0 0.0 1.0)))

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

#1975 nhoclangbat

nhoclangbat

    Edu level: li10

  • Members
  • PipPipPipPipPipPipPip
  • 1409 Bài viết
Điểm đánh giá: 379 (khá)

Đã gửi 15 October 2014 - 07:48 PM

- thank a 7 nhoc quên phén thằng 90 ^^

- thank a Bình ,hi cái mũi tên a Bình vẽ to quá ^^, mà hình như dư 1 điểm đầu thì phải a nhỉ  :P , hàm của anh Bình chuyền tham số đỡ nhọc hơn hàm của nhoc mót nhỉ

- thằng 42, 91 nó là gì mấy a nhỉ, nhoc xem trong help mà chưa hiểu, còn cái xdata trong hàm mót của nhoc nhoc cũng ko hiểu nó là gi


  • 0
"...................][)e\/i][_ /\/\@Y CrY....................."

(defun THỔ_DÂN_HỌC_CAD (xxxx) ...) ^_^








#1976 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 15 October 2014 - 08:31 PM

Cái 90,91 không có cũng vẫn tạo dc pline.

42 là arc nếu /= 0

Còn xdata là thông tin ghi thêm và lưu vào pline.

thí dụ : (setq xdata '((-3 ("NHOC" (1000 . "Nhoc is handsome") (1000 . "And intelligent")))))

muốn coi xdata thì (assoc -3 (entget (car (entsel)) '("NHOC")))))


  • 0

#1977 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 15 October 2014 - 09:19 PM

Sao có thể bỏ được mã 90 Tot77 nhỉ?


  • 0

* 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.


#1978 Tot77

Tot77

    biết lệnh adcenter

  • Members
  • PipPipPipPipPipPipPip
  • 990 Bài viết
Điểm đánh giá: 498 (tốt)

Đã gửi 15 October 2014 - 09:44 PM

 Bỏ 90 nó vẫn tạo dc pline, chỉ có điều nó không chính xác.  :)  :)


  • 0

#1979 Doan Van Ha

Doan Van Ha

    biết lệnh adcenter

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

Đã gửi 15 October 2014 - 09:51 PM

Nói thiệt là nếu bỏ 90 đi thì ôi thôi rồi luô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.


#1980 phamthanhbinh

phamthanhbinh

    biết lệnh adcenter

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

Đã gửi 16 October 2014 - 10:24 AM

- thank a 7 nhoc quên phén thằng 90 ^^

- thank a Bình ,hi cái mũi tên a Bình vẽ to quá ^^, mà hình như dư 1 điểm đầu thì phải a nhỉ  :P , hàm của anh Bình chuyền tham số đỡ nhọc hơn hàm của nhoc mót nhỉ

- thằng 42, 91 nó là gì mấy a nhỉ, nhoc xem trong help mà chưa hiểu, còn cái xdata trong hàm mót của nhoc nhoc cũng ko hiểu nó là gi

Hề hề hề,

To hay bé là do mình lựa chọn thôi mà, Nhóc cứ thay thế thoải mái theo ý nhóc.

Dư điểm đầu là do ..... dư, nếu nhóc bỏ điểm này thì phải sửa (90 . 4) thành (90 . 3)

Thằng 42 gọi là hệ số bulge của đoạn polyline , nếu thẳng thì nó bằng 0 và nếu >< 0 thì đoạn đó cong.

Thằng 91 là cái chi chi thì không rõ bởi trong các mã cơ bản của Lwpolyline không thấy nói đến nó.

Xdata bác Tot77 đã giải thích.

Thực ra thì trong đoạn code của mình gửi có thể bỏ béng thằng (210 .......), như vậy sẽ gọn hơn. Mã 90 không bỏ được, thậm chí đổi vị trí của nó trong elist cũng phải coi chừng đó.


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