Đế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

#2601 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 18 July 2015 - 11:03 PM

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)))))

  • 2

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


#2602 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 19 July 2015 - 03:00 AM

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)))
)
 

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

#2603 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 19 July 2015 - 02:48 PM

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


  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#2604 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 19 July 2015 - 08:42 PM

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 ")")))

  • 2

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


#2605 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 19 July 2015 - 09:21 PM

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


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

#2606 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 19 July 2015 - 09:26 PM

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 để ý.


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


#2607 ndtnv

ndtnv

    biết lệnh minsert

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

Đã gửi 20 July 2015 - 09:44 AM

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)


  • 2

#2608 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 20 July 2015 - 10:01 AM

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.


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


#2609 ndtnv

ndtnv

    biết lệnh minsert

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

Đã gửi 20 July 2015 - 10:11 AM

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.c...-do-vui/page-66

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

https://bosker.wordp...m-in-the-world/


  • 1

#2610 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 20 July 2015 - 10:39 AM

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.c...-do-vui/page-66

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

https://bosker.wordp...m-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.


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


#2611 Tr.CongSon

Tr.CongSon

    biết lệnh array

  • Members
  • PipPipPip
  • 183 Bài viết
Điểm đánh giá: 40 (tàm tạm)

Đã gửi 20 July 2015 - 03:16 PM

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


  • 0

#2612 ndtnv

ndtnv

    biết lệnh minsert

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

Đã gửi 20 July 2015 - 03:39 PM

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))


  • 1

#2613 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 20 July 2015 - 04:06 PM

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



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#2614 Tr.CongSon

Tr.CongSon

    biết lệnh array

  • Members
  • PipPipPip
  • 183 Bài viết
Điểm đánh giá: 40 (tàm tạm)

Đã gửi 20 July 2015 - 04:43 PM

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 ạ???


  • 0

#2615 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 20 July 2015 - 10:27 PM

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))

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


#2616 Tr.CongSon

Tr.CongSon

    biết lệnh array

  • Members
  • PipPipPip
  • 183 Bài viết
Điểm đánh giá: 40 (tàm tạm)

Đã gửi 21 July 2015 - 10:06 AM

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 ạ??


  • 0

#2617 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 21 July 2015 - 10:22 AM

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


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


#2618 thanhduan2407

thanhduan2407

    biết lệnh adcenter

  • Advance Member
  • PipPipPipPipPipPipPip
  • 995 Bài viết
Điểm đánh giá: 223 (khá)

Đã gửi 21 July 2015 - 06:16 PM

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 đã


  • 0



Tôi là con kiến bò trên sa mạc kiến thức bao la. Biển học thật rộng lớn







#2619 pphung183

pphung183

    biết dimstyle

  • Members
  • PipPipPipPipPip
  • 384 Bài viết
Điểm đánh giá: 425 (tốt)

Đã gửi 21 July 2015 - 06:45 PM

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à :)


  • 2

#2620 ndtnv

ndtnv

    biết lệnh minsert

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

Đã gửi 22 July 2015 - 08:20 AM

- 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)

  • 2