Chuyển đến nội dung
Diễn đàn CADViet
Jin Yong

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

Các bài được khuyến nghị

Rảnh được tí, code cho em đây. Hóa ra nó không dễ như lầm tưởng ban đầu.

Hàm này ứng dụng thực tế là khá nhiều đấy!

 

(defun c:00 (/ ten f lst i it tLst rt)
 (if (setq ten (getfiled "Select File" (getvar "dwgprefix") "txt" 8))
  (progn
   (setq f (open (findfile ten) "r"))
   (while (setq Line (read-line f))
    (setq lst (cons Line lst)))))
 (setq i -1)
 (while (setq it (nth (setq i (1+ i)) (reverse lst)))
  (if (not (wcmatch it "COC*"))
   (setq tLst (append tLst (list it)))
   (setq rt (append rt (list tLst))
         tLst (list it))))
 (mapcar '(lambda(x) (append (list (vl-string-right-trim "\t" (substr (car x) 5)))
    (mapcar '(lambda(y) (read (strcat "(" y ")"))) (cdr x)))) (cdr (append rt (list tLst)))))
  • Vote tăng 2

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

Dạ. Em cũng đang về quê. Chắc mấy hnay mới lên. Em cảm ơn bác nhiều. Lần nào bác cũng là người giúp em.

Hề hề hề, 

Mình viết bậy cái này, thanhduan2407 thử coi có đúng ý bạn không nhé. Nếu đúng thì thanhduan2407 hoàn tất nốt các việc phụ như bẫy lỗi khử biến chi chi đó. Mình chưa làm mấy việc này.

 

(defun c:t2l ()
(setq  fn (getfiled "Select Data File" "" "txt" 0)
            f (open fn "r")
            txtl nil
           ls1 nil
           ls2 nil
           ls3 nil
)
(while (/= (setq txt (read-line f)) nil)
    (setq txt (separate txt "\t"))
    (setq txtl (append txtl (list txt)))
)
(foreach sl txtl
    (if (= (car sl) (read "COC"))
        (progn
           (setq sh (cadr sl)
                     tt (vl-position sl txtl)
                     ls1 (append ls1(list (list sh tt)))
                   ;;  ls2 (append ls2 (list ls1))
           )
        )
     )
)
(setq n (length ls1) i 0)
(while (<= i (- n 1))  
      (setq sc (car (nth i ls1))
                k (cadr (nth i ls1))
                m (if (< i (1- n))  (cadr (nth (1+ i) ls1)) (length txtl))
                ls2 (list sc)
      ) 
      (while (< (1+ k) m)
             (setq ls2 (append ls2 (list (nth (1+ k) txtl))))
             (setq k (1+ k))
      )
      (setq ls3 (append ls3 (list ls2)))
      (setq i (1+ i))
)
                
      
 
)
;;;;;;;;;;;;;;;;;;;;;;
(defun Separate (S sym / i L ch)
(setq i 0 L nil)
(while (< i (strlen S))
      (setq i (1+ i) ch (substr S i 1))
      (if (= ch sym) (progn
(setq
     L (append L (list (read (substr S 1 (- i 1)))))
     S (substr S (1+ i) (- (strlen S) i))
     i 0
)
      )) 
)
(append L (list (read S)))
)
 
  • Vote tăng 2

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

Cảm ơn bác @Doan Van Ha và bác @Phamthanhbinh: Em luôn theo dõi bài viết nhưng hiện tại em đang ở quê

, ko mang máy tính nên chưa check đc. Em cảm ơn các bác nhiều lắm

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

Sợ rằng mai kia mốt nọ mình không hiểu mình đã viết những gì, nên gắng sửa lại cho tường minh hơn tí, ai muốn dùng cũng dễ áp dụng hơn tí.

 

(defun c:00 (/ ten f lst line)
 (if (setq ten (getfiled "Select File" (getvar "dwgprefix") "txt" 8))
  (progn
   (setq f (open (findfile ten) "r"))
   (while (setq Line (read-line f))
    (setq lst (cons Line lst)))))
 (Sap_xep lst "COC"))
(defun Sap_xep(lst group / i line lst1 lst2 lst3) 
 (setq i -1)
 (while (setq line (nth (setq i (1+ i)) (reverse lst)))
  (if (not (vl-string-search group line))
   (setq lst1 (append lst1 (list line)))
   (setq lst2 (append lst2 (list lst1))
         lst1 (list line))))
 (setq lst3 (cdr (append lst2 (list lst1))))
 (mapcar '(lambda(x) (append (list (vl-string-right-trim "\t" (substr (car x) (+ (strlen group) 2)))) (mapcar '(lambda(y) (Ptr->L y)) (cdr x)))) lst3))
(defun Ptr->L(ptr)
 (read (strcat "(" ptr ")")))
  • Vote tăng 2

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

Cảm ơn bác @Doan Van Ha và bác @Phamthanhbinh: Em luôn theo dõi bài viết nhưng hiện tại em đang ở quê

, ko mang máy tính nên chưa check đc. Em cảm ơn các bác nhiều lắm

Hề hề hề, 

Thanduan2407 lưu ý rằng mình quên chưa đóng file txt đã mở. Vậy Thanduan2407 bổ sung thêm hàm (close f) cho mình nhé.

  • Vote tăng 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

Hề hề hề, 

Thanduan2407 lưu ý rằng mình quên chưa đóng file txt đã mở. Vậy Thanduan2407 bổ sung thêm hàm (close f) cho mình nhé.

Tôi cũng thế nhé! Đóng lại giùm. Do đoạn code mở và đọc file lấy từ file gốc nên khô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

Thuật toán của cả 2 bạn đều chậm nếu làm việc với list có nhiều phần tử.

Với kiểu list, tốc độ chạy nhiều lúc không như mình nghĩ.

Trước đây tôi cũng nghĩ là dùng append sẽ nhanh hơn cons & reverse, nhưng sau khi đọc các bài #1191 - #1196 ở topic này, viết lisp để test thì mới hiểu và chú ý hơn khi làm việc với list.

Lisp của bạn Doan Van Ha ngoài chậm do dùng nth còn có thêm 1 lỗi làm chậm chương trình đáng kể (nếu debug sẽ thấy)

  • Vote tăng 2

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

Thuật toán của cả 2 bạn đều chậm nếu làm việc với list có nhiều phần tử.

Với kiểu list, tốc độ chạy nhiều lúc không như mình nghĩ.

Trước đây tôi cũng nghĩ là dùng append sẽ nhanh hơn cons & reverse, nhưng sau khi đọc các bài #1191 - #1196 ở topic này, viết lisp để test thì mới hiểu và chú ý hơn khi làm việc với list.

Lisp của bạn Doan Van Ha ngoài chậm do dùng nth còn có thêm 1 lỗi làm chậm chương trình đáng kể (nếu debug sẽ thấy)

- Tôi rất ít dùng append trong việc tạo list vì từ lâu đã biết là nó chậm, nhưng không thấy chủ topic y/c tốc độ nên lấy mấy hàm đã có đem sửa lại cho khỏe vậy.

- Không dùng nth thì chắc phải dùng cdr vậy? Tôi chưa tìm được chứng cứ là hàm nth chạy chậm nên đang thắc mắc(?).

- Lỗi nữa làm chậm thì chưa hiểu đó là lỗi gì?

Dù sao cũng rất cám ơn ndtnv đã góp ý. Chủ đề "tăng tốc độ lisp" là một chủ đề rất hứng thú. Mọi người cũng đã bàn nhiều trên này và thực tế lập trình cũng "đau khổ" vì nó nhiều, nhưng đôi khi viết theo y/c thì hay làm biế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

1. nth chỉ dùng khi lấy 1 phần tử, dùng foreach thay cho nth khi duyệt list

2. Hàm reverse nằm trong while nên thực hiện nhiều lần

Đồng ý với bạn là khi viết theo y/c thì cũng hay làm biếng để tối ưu code.

Khi giải đố vui cũng vậy, lấy vd code của tôi trong bài #1312

http://www.cadviet.com/forum/topic/274-do-vui/page-66

Đệ quy dạng này được nhận xét là:

https://bosker.wordpress.com/2011/04/29/the-worst-algorithm-in-the-world/

  • Vote tăng 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

1. nth chỉ dùng khi lấy 1 phần tử, dùng foreach thay cho nth khi duyệt list

2. Hàm reverse nằm trong while nên thực hiện nhiều lần

Đồng ý với bạn là khi viết theo y/c thì cũng hay làm biếng để tối ưu code.

Khi giải đố vui cũng vậy, lấy vd code của tôi trong bài #1312

http://www.cadviet.com/forum/topic/274-do-vui/page-66

Đệ quy dạng này được nhận xét là:

https://bosker.wordpress.com/2011/04/29/the-worst-algorithm-in-the-world/

Cái ý trên thì đã được đọc trong các thuật toán. Chúng gọi là "đi tính lại cái đã tính", trong khi nếu biết lưu biến thì tốc độ đôi khi nó tăng hàng chục, thậm chí hàng ngàn lần.

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

Chào các anh chị,
Em mới viết 1 đoạn Lisp để chia 1 dimension thành 2 dimension như sau:

(defun C:dvd (/ dim1 dim2 dim_ent elist elist1 elist2 en_pt osm pt st_pt)
(setvar "CMDECHO" 0)
(command "Undo" "BE")
(setq osm (getvar "osmode"))
(setq dim_ent (car (entsel "\nSelect dimension:"))
elist (entget dim_ent)
st_pt (cdr (assoc 13 elist))
en_pt (cdr (assoc 14 elist))
)
(setvar "osmode" 4)
(setq pt (getpoint "\nPick point for new node location : "))
(entmake elist)
(setq dim1 (entlast)
elist1 (entget dim1)
elist1 (subst (cons 14 pt) (assoc 14 elist1) elist1)
)
(entmod elist1)
(entmake elist)
(setq dim2 (entlast)
elist2 (entget dim2)
elist2 (subst (cons 13 pt) (assoc 13 elist2) elist2)
)
(entmod elist2)
(command "erase" dim_ent "")
(setvar "OSMODE" osm)
(command "Undo" "BE")
(setvar "CMDECHO" 1)
(princ)
)

 
 Sau khi chạy Lisp thì nó vẫn chia thành 2 dimension nhưng nó lại chồng lên nhau,mặc dù trước đó em đã subst mã dxf 13 và 14 cho 2 dim khác nhau rồi ạ (tham khảo file)

Anh chị có thể giải thích cho em hiểu thêm về vấn đề này với ạ

em cảm ơn

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

Nếu dùng entmake như trên thì dim 2 sẽ lấy dxf -1, 330, 5 của dim 1, mà các dxf trên phải duy nhất trên toàn bản vẽ => lỗi

Hãy dùng code sau để tạo dim thứ 2:

(vla-copy (vlax-ename->vla-object dim_ent))

  • Vote tăng 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

Em rất ủng hộ Topic "Tăng tốc trong Autolisp". Em đã viết khá nhiều lisp nhưng 1 số chương trình tốc độ rất chậm dẫn đến đơ máy. Mong rằng Topic được lập ra để các anh em hiểu sâu hơn và sử dụng hàm cũng như phương thức để tốc độ được nhanh hơn.

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

Sửa lại như a @ndtnv thì lisp chạy "mướt mờ" luôn.hehe^^ Like like!!

 Em  đọc trong Help thấy như vậy: dxf 5 (Handle) ,dxf 330 (Soft-pointer ID/ handle tone dictionary )

Nhưng ko hiểu nó là cái gì ^^ và mục đích của cái này làm gì ạ.Em chỉ biết mỗi cái dxf -1 là entityname thôi.

Theo như anh giải thích thì bây giờ khi entmake dim2 thì em chỉ cần loại bỏ 3 cái mã -1 ,5,330 ra khỏi list là được đúng ko ạ???

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

Bạn tham khảo lisp Split Dim này nhé! Của tác giả nào thì quên mất tiêu, srr.

 

(defun c:SplitDims (/ sel newpt ent edata elist)
 (if
  (and
   (setq sel (entsel "\nSelect Dimension to Split."))
   (setq newpt (getpoint "\nSelect new Dim Point")))
  (progn
   (setq ent (car sel)
             edata (entget ent)
             elist (vl-remove-if '(lambda (pair) (member (car pair) (list -1 2 5 102 310 300 330 331 340 350 360 410))) edata))
   (entmod (subst (cons 14 newpt) (assoc 14 elist) edata))
   (entmakex (subst (cons 13 newpt) (assoc 13 elist) elist))))
 (princ))
  • Vote tăng 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

Em cảm ơn a Hạ nhiều .Lần nào Post lên a đều giúp hết ^^ Like ...!!

Code này ngắn gọn,dễ hiểu và có bẫy lỗi nữa ^^

Anh cho em hỏi luôn cái Entmakex này khác entmake khác nhau gì ko ạ??

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

Em cảm ơn a Hạ nhiều .Lần nào Post lên a đều giúp hết ^^ Like ...!!

Code này ngắn gọn,dễ hiểu và có bẫy lỗi nữa ^^

Anh cho em hỏi luôn cái Entmakex này khác entmake khác nhau gì ko ạ??

Đây là code tìm trên mạng, đúng ra chỉ cần entmake mà không cần entmakex.

Sự khác nhau:

- Entmake: chỉ tạo đối tượng và trả về danh sách kiểu entget của đối tượng đó, không trả về tên đối tượng.

- Entmakex: tạo đối tượng và trả về tên của đối tượng vừa tạo. Dùng khi cần lấy tên đối tượng. VD: (setq ent (entmakex...))

  • Vote tăng 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

Chương trình download của diễn đàn bị sao ấy ạ!

Em mới lên HN. Em check lisp thì của bác Doan Van Ha chạy như ý ạ! Còn của bác Phamthanhbinh chưa ra dc kết quả. Em không biết vì sao. Em check lại đã

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

Chương trình download của diễn đàn bị sao ấy ạ!

Em mới lên HN. Em check lisp thì của bác Doan Van Ha chạy như ý ạ! Còn của bác Phamthanhbinh chưa ra dc kết quả. Em không biết vì sao. Em check lại đã

Bác Phamthanhbinh Code nhanh nên chưa đưa ket quả ls3 ra cuối thôi mà :)

  • Vote tăng 2

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

- Tôi rất ít dùng append trong việc tạo list vì từ lâu đã biết là nó chậm, nhưng không thấy chủ topic y/c tốc độ nên lấy mấy hàm đã có đem sửa lại cho khỏe vậy.

- Không dùng nth thì chắc phải dùng cdr vậy? Tôi chưa tìm được chứng cứ là hàm nth chạy chậm nên đang thắc mắc(?).

- Lỗi nữa làm chậm thì chưa hiểu đó là lỗi gì?

Dù sao cũng rất cám ơn ndtnv đã góp ý. Chủ đề "tăng tốc độ lisp" là một chủ đề rất hứng thú. Mọi người cũng đã bàn nhiều trên này và thực tế lập trình cũng "đau khổ" vì nó nhiều, nhưng đôi khi viết theo y/c thì hay làm biếng.

Không biết bạn đã tìm ra chứng cứ chưa, sau đây là các test của tôi:

Test 1: AppendVsCons - So sánh append cons + reverse

Test 2: ReverseInWhile - So sánh khi reverse nằm trong & ngoài while, dùng nth khi duyệt list

Test 3: NthVsForeach - So sánh dùng nth foreach khi duyệt list

(defun AppendVsCons (n / i t0 t1 t2 lst1 lst2)
(setq t0 (getvar "millisecs"))
  (setq i -1)
  (repeat n  (setq i (1+ i) lst1 (append lst1 (list i)))  )
(setq t1 (getvar "millisecs"))
  (setq i -1)
  (repeat n  (setq i (1+ i) lst2 (cons i lst2))  )
(setq lst2 (reverse lst2))
(setq t2 (getvar "millisecs"))
(list (- t1 t0) (- t2 t1) (equal lst1 lst2))
)
(AppendVsCons 20000)
=> (71890 32 T)

(defun ReverseInWhile (n / i t0 t1 t2 lst a)
(setq i -1)
(repeat n (setq i (1+ i) lst (cons i lst))  )
(setq t0 (getvar "millisecs"))
(setq i -1)
(while (setq a (nth (setq i (1+ i)) (reverse lst))))
(setq t1 (getvar "millisecs"))
(setq lst (reverse lst))
(setq i -1)
(while (setq a (nth (setq i (1+ i)) lst)))
(setq t2 (getvar "millisecs"))
(list (- t1 t0) (- t2 t1) )
)
(ReverseInWhile 10000)
=> (41203 156)

(defun NthVsForeach (n / i t0 t1 t2 lst a)
(setq i -1)
(repeat n (setq i (1+ i) lst (cons i lst))  )
(setq t0 (getvar "millisecs"))
(setq lst (reverse lst))
(setq i -1)
(while (setq a (nth (setq i (1+ i)) lst)))
(setq t1 (getvar "millisecs"))
(foreach e lst (setq a e))
(setq t2 (getvar "millisecs"))
(list (- t1 t0) (- t2 t1) )
)
(NthVsForeach 50000)
=> (3875 16)
  • Vote tăng 2

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

Cám ơn ndtnv. Tôi đã like bữa trước, nghĩa là rõ rồi mà. Nói chung là do sửa code có sẵn nên thường không để ý tốc độ, chứ khi viết mới - đặc biệt khi đã lưu tâm đến tốc độ - thì thường là các hạn chế trên đều né.

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

Nhờ các bác chỉ giáo sửa em 1 chút để hoàn thiện việc tăng tốc độ được không ạ?

Vì không chỉ bài toán nhỏ này mà em có kế hoạch nâng cấp hết lại các chương trình em viết. Vì đa số em hay dùng Append, chương trình chạy rất chậm nên đôi khi em thất vọng. Em cảm ơn các bác nhiều.

P/s: Em vọc được cả 2 cách bác @Phamthanhbinh và bác @Doan Van Ha rồi

(vl-load-com)
(defun replace_str (str)
  (setq	rs (acet-str-replace "," " " str)
	rs (acet-str-replace "	" " " rs)
  )
  (split_space rs)
)
(defun split_space (str)
  (vl-remove-if
    '(lambda (x) (= x ""))
    (acet-str-to-list " " str)
  )
)

(defun c: (/ DATA F I L1 LINE LST LST1 LST2 LST3  LST4 TEN)
  (if (setq ten (getfiled "Select File" (getvar "dwgprefix") "txt" 8))
    (progn
      (setq f (open (findfile ten) "r"))
      (setq lst (list))
      (while
	(setq Line (read-line f))
	 (wcmatch Line
		  (strcat "*" (chr 9) "*,*" (chr 32) "*,*" (chr 44) "*")
	 )
	 (progn
	   (setq data (replace_str Line))
	   (if (/= (length data) 0)
	     (progn
	       (setq lst (cons data lst))
	     )
	   )
	 )
      )

      (setq i 0)
      (while
	(setq l1 (nth i (reverse lst)))
	 (if (not (equal (car l1) "COC"))
	   (setq lst1 (append lst1 (list l1)))
	   (progn
	     (setq lst2	(append lst2 (list lst1))
		   lst1	(list l1)
	     )
	   )
	 )
	 (setq i (1+ i))
      )

      (setq lst3 (cdr (append lst2 (list lst1))))
      (setq lst4 (mapcar '(lambda (x)
			    (cons  (cadr (car x))  (cdr x) )
			  ) lst3
		 )
      )
    )
  )
  (princ  lst4)
  (princ)
)

File Test: http://www.cadviet.com/upfiles/5/36665_test_2.txt

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

Nhờ các bác chỉ giáo sửa em 1 chút để hoàn thiện việc tăng tốc độ được không ạ?

Vì không chỉ bài toán nhỏ này mà em có kế hoạch nâng cấp hết lại các chương trình em viết. Vì đa số em hay dùng Append, chương trình chạy rất chậm nên đôi khi em thất vọng. Em cảm ơn các bác nhiều.

P/s: Em vọc được cả 2 cách bác @Phamthanhbinh và bác @Doan Van Ha rồi

(vl-load-com)
(defun replace_str (str)
  (setq	rs (acet-str-replace "," " " str)
	rs (acet-str-replace "	" " " rs)
  )
  (split_space rs)
)
(defun split_space (str)
  (vl-remove-if
    '(lambda (x) (= x ""))
    (acet-str-to-list " " str)
  )
)

(defun c: (/ DATA F I L1 LINE LST LST1 LST2 LST3  LST4 TEN)
  (if (setq ten (getfiled "Select File" (getvar "dwgprefix") "txt" 8))
    (progn
      (setq f (open (findfile ten) "r"))
      (setq lst (list))
      (while
	(setq Line (read-line f))
	 (wcmatch Line
		  (strcat "*" (chr 9) "*,*" (chr 32) "*,*" (chr 44) "*")
	 )
	 (progn
	   (setq data (replace_str Line))
	   (if (/= (length data) 0)
	     (progn
	       (setq lst (cons data lst))
	     )
	   )
	 )
      )

      (setq i 0)
      (while
	(setq l1 (nth i (reverse lst)))
	 (if (not (equal (car l1) "COC"))
	   (setq lst1 (append lst1 (list l1)))
	   (progn
	     (setq lst2	(append lst2 (list lst1))
		   lst1	(list l1)
	     )
	   )
	 )
	 (setq i (1+ i))
      )

      (setq lst3 (cdr (append lst2 (list lst1))))
      (setq lst4 (mapcar '(lambda (x)
			    (cons  (cadr (car x))  (cdr x) )
			  ) lst3
		 )
      )
    )
  )
  (princ  lst4)
  (princ)
)

File Test: http://www.cadviet.com/upfiles/5/36665_test_2.txt

Hề hề hề,

1/- Sorry thanhduan2407 vì mấy hôm rồi bận nên không vào diễn đàn được. Do đó chưa trả lời các thắc mắc của bạn được. Nay thấy bạn pphung183 đã trả lời trúng nên chắc thanhduan2407 sẽ xử lý được.

2/- Việc code của mình hiện tại thú thực là do hạn chế về kiến thức (học mót mà) nên chưa thể giải quyết được các vấn đề về tốc độ cũng như thuật toán tối ưu được. Hầu hết đều chỉ mới ở dạng thực hiện được nhiệm vụ cụ thể nào đó chứ chưa thể tổng quát hóa nó lên. Vì vậy nó luôn chỉ có thể là một cách để tham khảo và người dùng có thể dựa vào đó để giải quyết cái khó khăn trước mắt của mình cho phù hợp với yêu cầu của công việc mà thôi. Còn về lâu dài và cơ bản thì đều yêu cầu người dùng phải có các kiến thức tối thiểu về lisp để hiệu chỉnh và hoàn thiện nó nhằm phục vụ tốt nhất cho yêu cầu của họ.

3/- Quá trình code lisp theo yêu cầu của mình thực chất là một quá trình tự học hỏi để có thể hiểu biết nhiều hơn về các thuật toán cũng như các khả năng sử dụng lisp để phục vụ cho mục đích công việc của mình. Do vậy không thể tránh được các khiếm khuyết thường gặp của những người đi học mà chưa có nhiều kinh nghiệm thực tiễn. Rất mong mọi người thể tất cho những khiếm khuyết đó và giúp đỡ mình nhiều hơn để có thể hoàn thiện kiến thức của bản thân.

4/- Vô cùng cám ơn mọi góp ý của các bác, các anh chị em trên diễn đàn đã góp ý cũng như giúp đỡ mình trong quá trình học hỏi của mình trên diễn đàn.

 

@Bác DoanVanHa: không hiểu sao mà lisp của bác khi mình down về và sử dụng thì bị báo lỗi là ; error: syntax error (Mình đã check tỷ mỉ các dấu ngoặc đóng mở thì đều thấy đủ và OK cả ).

Vì thế mình chưa test được để hiểu cách sử dụng hàm (mapcar .....) của bác. Có lẽ là lỗ do mình vẫn dùng Cad2004 chăng. Bác có thể giúp mình cach sửa để mình có thể chạy được cái lisp của bác không????

  • Vote tăng 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

Hề hề hề,

@Bác DoanVanHa: không hiểu sao mà lisp của bác khi mình down về và sử dụng thì bị báo lỗi là ; error: syntax error (Mình đã check tỷ mỉ các dấu ngoặc đóng mở thì đều thấy đủ và OK cả ).

Vì thế mình chưa test được để hiểu cách sử dụng hàm (mapcar .....) của bác. Có lẽ là lỗ do mình vẫn dùng Cad2004 chăng. Bác có thể giúp mình cach sửa để mình có thể chạy được cái lisp của bác không????

- Lỗi syntax error chắc là do lỗi down load của diễn đàn. Bác thử mở trong vlide xem sao.

- Lisp của tôi có 2 hàm vl-... cad 2004 không có >> bác có thể tự tạo 2 hàm đó để dùng cho 2004.

  • Vote tăng 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

Tạo một tài khoản hoặc đăng nhập để nhận xét

Bạn cần phải là một thành viên để lại một bình luận

Tạo tài khoản

Đăng ký một tài khoản mới trong cộng đồng của chúng tôi. Điều đó dễ mà.

Đăng ký tài khoản mới

Đăng nhập

Bạn có sẵn sàng để tạo một tài khoản ? Đăng nhập tại đây.

Đăng nhập ngay


×