TRUNGNGAMY 91 Báo cáo bài đăng Đã đăng Tháng 7 18, 2010 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 Chia sẻ bài đăng này Liên kết tới bài đăng Chia sẻ trên các trang web khác
VUVUZELA 100 Báo cáo bài đăng Đã đăng Tháng 7 18, 2010 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ư ý Chia sẻ bài đăng này Liên kết tới bài đăng Chia sẻ trên các trang web khác
TRUNGNGAMY 91 Báo cáo bài đăng Đã đăng Tháng 7 18, 2010 Bạn có thể nói rõ hơn đưọc không, như thế mình không hiểu lắmVí 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 ... Chia sẻ bài đăng này Liên kết tới bài đăng Chia sẻ trên các trang web khác
gia_bach 1558 Báo cáo bài đăng Đã đăng Tháng 7 19, 2010 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 Chia sẻ bài đăng này Liên kết tới bài đăng Chia sẻ trên các trang web khác
TRUNGNGAMY 91 Báo cáo bài đăng Đã đăng Tháng 7 19, 2010 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ó. Chia sẻ bài đăng này Liên kết tới bài đăng Chia sẻ trên các trang web khác
Thaistreetz 539 Báo cáo bài đăng Đã đăng Tháng 9 28, 2010 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. Chia sẻ bài đăng này Liên kết tới bài đăng Chia sẻ trên các trang web khác