Đến nội dung


Hình ảnh
- - - - -

[Hỏi] hỏi về hàm assoc


  • Please log in to reply
15 replies to this topic

#1 lp_hai

lp_hai

    biết lệnh measure

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

Đã gửi 18 August 2011 - 02:04 PM

Cái này em ko hiểu. Mong các Pác chỉ giùm:
Khi em đánh dòng code này vào command line:
(assoc 0 (entget(car(entsel)))) và chọn đối tượng là Mtext
->> (0 . "MTEXT")
khi em gõ:
(cons 0 "MTEXT") thì nó cũng có kết quả là (0 . "MTEXT")
Vậy mà khi em so sánh thế này:
(=(assoc 0 (entget(car(entsel)))) (cons 0 "MTEXT"))
thì nó ko T mà là nil????
Mong các pác chỉ giùm em sai ở chổ nào. Vì em muốn dùng cái này để lọc dt trong tập hợp chọn trước.
  • 1
Hình đã gửi

#2 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 18 August 2011 - 02:14 PM

Cái này em ko hiểu. Mong các Pác chỉ giùm:
Khi em đánh dòng code này vào command line:
(assoc 0 (entget(car(entsel)))) và chọn đối tượng là Mtext
->> (0 . "MTEXT")
khi em gõ:
(cons 0 "MTEXT") thì nó cũng có kết quả là (0 . "MTEXT")
Vậy mà khi em so sánh thế này:
(=(assoc 0 (entget(car(entsel)))) (cons 0 "MTEXT"))
thì nó ko T mà là nil????
Mong các pác chỉ giùm em sai ở chổ nào. Vì em muốn dùng cái này để lọc dt trong tập hợp chọn trước.

Bạn phải dùng hàm equal chứ không thể hàm =. Hàm = không thể so sánh danh sách.
  • 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.


#3 18011985

18011985

    biết lệnh properties

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

Đã gửi 18 August 2011 - 02:28 PM

nếu để lọc text hay MTEXT thì dùng (setq ss (ssget "X" (list(cons 0 "TEXT"))))
  • 0
Trăng 16 trăng tròn
Em 16 bụng ... như trăng

Hướng dẫn sử dụng diễn đàn:
Để cảm ơn hay bài viết có ích: Ấn dấu + cuối bài.
Không vừa lòng hay bài spam: Ấn dấu - cuối bài.

#4 lp_hai

lp_hai

    biết lệnh measure

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

Đã gửi 18 August 2011 - 02:30 PM

Bạn phải dùng hàm equal chứ không thể hàm =. Hàm = không thể so sánh danh sách.

Thanks pác.
Cho em hỏi luôn, vậy hàm so sánh khác nhau thì sao? kiểu như /=
  • 1
Hình đã gửi

#5 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 18 August 2011 - 02:53 PM

Thanks pác.
Cho em hỏi luôn, vậy hàm so sánh khác nhau thì sao? kiểu như /=

Có hàm phủ định NOT
Phủ định của cái đúng là sai
Phủ định cái sai là đúng :rolleyes:
  • 1

#6 lp_hai

lp_hai

    biết lệnh measure

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

Đã gửi 18 August 2011 - 03:25 PM

Có hàm phủ định NOT
Phủ định của cái đúng là sai
Phủ định cái sai là đúng :rolleyes:

Ko được pác ah!
Hay là em bị sai cú pháp? :angry:
Command: (NOT (assoc 0 (entget(car(entsel)))) (cons 0 "MTEXT"))
Select object: ; error: too many arguments
  • 1
Hình đã gửi

#7 Tue_NV

Tue_NV

    KS Võ Quang Tuệ

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

Đã gửi 18 August 2011 - 03:29 PM

Ko được pác ah!
Hay là em bị sai cú pháp? :angry:
Command: (NOT (assoc 0 (entget(car(entsel)))) (cons 0 "MTEXT"))
Select object: ; error: too many arguments

Bạn phải viết như vầy :
(NOT (equal(assoc 0 (entget(car(entsel)))) (cons 0 "MTEXT")))

Hàm not chỉ có 1 đối số thôi
  • 1

#8 lp_hai

lp_hai

    biết lệnh measure

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

Đã gửi 18 August 2011 - 03:42 PM

Bạn phải viết như vầy :
(NOT (equal(assoc 0 (entget(car(entsel)))) (cons 0 "MTEXT")))

Hàm not chỉ có 1 đối số thôi

hehhehe. Cảm ơn cả nhà!
  • 1
Hình đã gửi

#9 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 18 August 2011 - 03:51 PM

Bạn phải viết như vầy :
(NOT (equal(assoc 0 (entget(car(entsel)))) (cons 0 "MTEXT")))
Hàm not chỉ có 1 đối số thôi

Hình như thêm cả:
(NULL (equal(assoc 0 (entget(car(entsel)))) (cons 0 "MTEXT")))
và:
(= nil (equal(assoc 0 (entget(car(entsel)))) (cons 0 "MTEXT")))
Nhưng chưa hiểu 3 thằng (not...) , (null...) , (= nil...) khác nhau ở chỗ nào, và dùng thằng nào hay hơ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.


#10 lp_hai

lp_hai

    biết lệnh measure

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

Đã gửi 18 August 2011 - 03:57 PM

nếu để lọc text hay MTEXT thì dùng (setq ss (ssget "X" (list(cons 0 "TEXT"))))

thanks pác. Nhưng mà ý em là lọc dt trong một tập dt đã có rồi. VD tập lúc đầu là ABC, bây giờ em muốn tập ss là AB.
  • 1
Hình đã gửi

#11 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 18 August 2011 - 04:31 PM

thanks pác. Nhưng mà ý em là lọc dt trong một tập dt đã có rồi. VD tập lúc đầu là ABC, bây giờ em muốn tập ss là AB.

Hề hề hề,
Để lọc kiểu này có các hàm (vl-remove-if....)hay (vl-remove-if-not ...)cũng hay ra phết. Chịu khó cắp cập theo bác Ketxu mấy bữa, bác ấy bày cho thì có mà dùng suốt đời chả hết. Hề hề hề,.... Dưng mà phải chuyển các tập đối tượng thành list các đối tượ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.

#12 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 18 August 2011 - 05:33 PM

thanks pác. Nhưng mà ý em là lọc dt trong một tập dt đã có rồi. VD tập lúc đầu là ABC, bây giờ em muốn tập ss là AB.

Vậy bạn có 2 cách cơ bản :
- 1 là xét tập ABC, nếu thằng nào bằng C thì xóa => Còn lại tập AB. Cách này dùng khi tập ABC bạn không cần nữa => K phải tạo biến trung gian
- 2 là xét tập ABC, nếu thằng nào bằng A hoặc B (Khác C) thì nhét vào 1 tập mới => Được tập mới AB. Cách này hợp lý khi bạn vẫn cần giữ nguyên tập ABC ban đầu để thao tác các việc khác.

Nếu đã có list tập ss (gồm các ename) thì nên dùng vl-remove hoặc vl-remove-if, vl-remove-if-not, còn nếu không, bạn hãy chạy vòng lặp qua ssname để kiểm tra điều kiện thôi ^^

@bác Bình : vỡ mũi em ^^
  • 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


#13 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 18 August 2011 - 11:32 PM

Nhàn, đọc lại từ đầu đến cuối topic này thấy có một chuyện... vui, ghi lại để các MOD xem có vui không nhé?
1). 1 câu hỏi, được vote 1 dấu +
2). 1 câu hỏi, được vote 1 dấu +
3). 1 câu nói em làm bị lỗi, được vote 1 dấu +
4). 1 câu cám ơn người khác, được vote 1 dấu +
5). 1 câu vừa cám ơn vừa hỏi, được vote 1 dấu +
Vị chi, 5 câu hỏi của 1 người, được 1 người khác vote 5 cái +, sướng ghê, và vui ghê!
Hôm qua, thấy bác Thaistreetz cho Cadviet 1 thư viện các hàm entmake, muốn vote, tự nhiên hết quota, lãng xẹt, hôm nay mới vote cho bác ấy.
Lần sau hỏi cho mau... giàu! :excl:

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


#14 ketxu

ketxu

    Copier - Paster - Editor

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

Đã gửi 19 August 2011 - 07:19 AM

Theo Ketxu biết thì là do bạn Hoan2182 đang trả nợ bạn lp_hai vụ đố vui có thưởng, nên không có gì là lạ cả, bác ĐVH cứ yên chí nhớn :lol:
  • 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


#15 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 19 August 2011 - 09:06 AM

@Tue_NV: không biết Bác đang nghĩ gì?
@Ketxu: hoá ra là thế, điều này đáng hoan nghênh.
@lp_hai+hoan: sr 2 bạn nhé.
Tóm lại: tất cả góp ý đều vì sự lành mạnh và phát triển của CadViet.
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.


#16 lp_hai

lp_hai

    biết lệnh measure

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

Đã gửi 19 August 2011 - 11:51 AM

Nhàn, đọc lại từ đầu đến cuối topic này thấy có một chuyện... vui, ghi lại để các MOD xem có vui không nhé?
1). 1 câu hỏi, được vote 1 dấu +
2). 1 câu hỏi, được vote 1 dấu +
3). 1 câu nói em làm bị lỗi, được vote 1 dấu +
4). 1 câu cám ơn người khác, được vote 1 dấu +
5). 1 câu vừa cám ơn vừa hỏi, được vote 1 dấu +
Vị chi, 5 câu hỏi của 1 người, được 1 người khác vote 5 cái +, sướng ghê, và vui ghê!
Hôm qua, thấy bác Thaistreetz cho Cadviet 1 thư viện các hàm entmake, muốn vote, tự nhiên hết quota, lãng xẹt, hôm nay mới vote cho bác ấy.
Lần sau hỏi cho mau... giàu! :excl:

hehhehe. Bác làm em hổ thẹn wá! Chắc tại cái Avatar "gợi cảm" ý mà! Heehehehee, ai biểu bác Hoan nhà ta hào phóng treo thưởng lớn wá. hôm wa tới giờ mới lên đây để vote cho các ý kiến giúp đở em.nên có chậm trễ.
Mà sao hnay em + mới có 2 cái là hết quota rồi cà??
  • 1
Hình đã gửi