Đến nội dung


Hình ảnh
- - - - -

Làm thế nào lập hàm có đối số thay đổi


  • Please log in to reply
5 replies to this topic

#1 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 18 July 2010 - 11:06 AM

Trong list có một số hàm có đối số thay đổi như hàm strcase chẳng hạn. VD (strcase "aA") -> "AA", còn (strcase "aA" T) -> "aa" mà các bạn đã biết. Nếu muốn lập một hàm tương tự
VD : (aaaa 1) -> 1, (aaaa 1 2) -> 2, (aaaa 1 2 T) ->0
thì làm thế nào. Bạn nào biết xin hướng dẫn. Cám ơn rất nhiều
  • 0

#2 VUVUZELA

VUVUZELA

    biết lệnh chamfer

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

Đã gửi 18 July 2010 - 04:06 PM

Bạn có thể nói rõ hơn đưọc không, như thế mình không hiểu lắm
Ví dụ rõ hơn được không?
nếu autolisp không hỗ trợ lệnh này thì bạn có thể dùng các lệnh con (thao tác với chuỗi list của bạn) để tách list ra cho ra kết quả như ý
  • 0

Hệ thống Liên Kết, Thiết Kế Tự Động

ttps://www.facebook...etThietKeTuDong


#3 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 18 July 2010 - 05:01 PM

Bạn có thể nói rõ hơn đưọc không, như thế mình không hiểu lắm
Ví dụ rõ hơn được không?
nếu autolisp không hỗ trợ lệnh này thì bạn có thể dùng các lệnh con (thao tác với chuỗi list của bạn) để tách list ra cho ra kết quả như ý

ý mình muốn lập nhiều hàm cùng tên nhưng có số đối số khác nhau như một số hàm do cad cung cấp : strcase, getstring, inters ...
  • 0

#4 gia_bach

gia_bach

    biết lệnh adcenter

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

Đã gửi 19 July 2010 - 10:51 AM

Trong list có một số hàm có đối số thay đổi như hàm strcase chẳng hạn. VD (strcase "aA") -> "AA", còn (strcase "aA" T) -> "aa" mà các bạn đã biết. Nếu muốn lập một hàm tương tự
VD : (aaaa 1) -> 1, (aaaa 1 2) -> 2, (aaaa 1 2 T) ->0
thì làm thế nào. Bạn nào biết xin hướng dẫn. Cám ơn rất nhiều

Bạn dùng kiểu của đối số là LIST, sau đó phụ thuộc vào chiều dài của đối số(LIST) này lập các hàm thực thi tuơng ứng.
ví dụ : Hàm đổi chuỗi sang chữ in hoa, với các tùy chọn :
- ch/dài của đối số = 1 : đổi toàn bộ chuỗi sang chữ in hoa
- ch/dài của đối số = 2 : đổi 1 phần bên trái của chuỗi sang chữ in hoa
- ch/dài của đối số = 3 : đổi 1 phần bên phải chuỗi sang chữ in hoa
(defun c:doit (/ str)
(defun strcase_substr (list_var / id id1 id2 len_var str)
(if (eq (type list_var) 'LIST)
(progn
(setq len_var (vl-list-length list_var))
(cond
((= len_var 1);convert all to uppercase
(strcase (car list_var)) )

((= len_var 2);convert left to uppercase
(setq str (car list_var)
id (cadr list_var))
(strcase (substr str 1 id)) )

((= len_var 3);convert right to uppercase
(setq str (car list_var)
id1 (cadr list_var)
id2 (caddr list_var) )
(strcase (substr str id1 id2)) )

(t nil )
) )
nil) )

(setq str "CadViet")
(princ "\nOrigin : ")
(princ str)
(princ "\nAll : ")
(princ (strcase_substr (list str)))
(princ "\nLeft : ")
(princ (strcase_substr (list str 3)))
(princ "\nRight : ")
(princ (strcase_substr (list str 4 7)))
(princ "\nNIL : ")
(princ (strcase_substr str))
(princ))

  • 1

#5 TRUNGNGAMY

TRUNGNGAMY

    biết lệnh block

  • Members
  • PipPipPipPipPipPip
  • 401 Bài viết
Điểm đánh giá: 91 (tàm tạm)

Đã gửi 20 July 2010 - 12:02 AM

Bạn dùng kiểu của đối số là LIST, sau đó phụ thuộc vào chiều dài của đối số(LIST) này lập các hàm thực thi tuơng ứng.
ví dụ : Hàm đổi chuỗi sang chữ in hoa, với các tùy chọn :
- ch/dài của đối số = 1 : đổi toàn bộ chuỗi sang chữ in hoa
- ch/dài của đối số = 2 : đổi 1 phần bên trái của chuỗi sang chữ in hoa
- ch/dài của đối số = 3 : đổi 1 phần bên phải chuỗi sang chữ in hoa

Cám ơn bạn. Mình thấy cad cung cấp một số hàm theo kiểu nạp chồng giống C++ nhưng kg biết cơ chế này có làm đc trong lisp kg. Nếu có thì mình có thể viết thêm một số hàm cùng tên khác đối số nhưng không can thiệp vào code của hàm đã có.
  • 0

#6 Thaistreetz

Thaistreetz

    biết lệnh adcenter

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

Đã gửi 28 September 2010 - 03:17 PM

Trước đây em không nghĩ điều này là cần thiết cho lắm, nhưng hôm nay viết 1 cái hàm con mà tham số cho nó lên đến con số 8 thì mỗi lần dùng mới thấy oải. nhất là trong những trường hợp như thế này:
(tenhamcon A [B [C [D..]]]) - 1 tham số chỉ có ý nghĩa sử dụng khi 1 tham số khác có mặt. trong hàm trên thì các tham số B, C, D không nhất thiết phải có. D chỉ được dùng đến khi có C, C chỉ được dùng đến khi có B.

Mẹo của bách của bác Gia Bach rất hay, giải quyết được vấn đề nhưng nếu xét về mặt lập trình chỉ tương đối giống thôi. mỗi lần sử dụng lại phải thêm 1 hàm (list ...) vào. Có thể cách làm này không giống bản chất với cách mà các hàm Visual lisp được xây dựng.
  • 0

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