• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            Life is Good.

            Enhance Tech and English
            隨筆 - 65, 文章 - 20, 評論 - 21, 引用 - 0
            數據加載中……

            Boosting Lisp performance - cons vs append and foreach vs while/nth

            From our PD- Nate Holt:

            All,

             More and more of you are finding that you have to deal with this goofy language called AutoLISP. Here are a couple items I pulled together related to some lisp “best practices”. Both apply to optimizing performance when processing large “lists” of data.

            Thanks,

            Nate.

                CONS versus APPEND

            The cons function adds an element to the beginning of a list. The append function can be used to give the equivalent of adding an element to the beginning or end of a list.

            Using the cons function can be MUCH faster than using append to build up a large list.

            We'll run two tests to create a dummy list of 10,000 integer numbers. The first test is using the "cons" function. Appload and type test1 [enter] at the command prompt.

            (defun c:test1 ( / )
              (setq i 1)
              (setq lst nil) ; start out with a blank list
              (repeat 10000
                (setq lst (cons i lst)) ; add next element to beginning of list
                (setq i (1+ i))
              )
              (setq lst (reverse lst)) ; put list back into correct order
              (princ)
            )

            The second test yields the same result but uses the "append" function:

            (defun c:test2 ( / )
              (setq i 1)
              (setq lst nil) ; start out with a blank list
              (repeat 10000
                (setq lst (append lst (list i))) ; append next element on to end of list
                (setq i (1+ i))
              )
              (princ)
            )

            The first test using "cons" builds the 10,000 element list in memory in less than 0.01 seconds (on my T61p).The second test using "append" builds the exact same 10,000 element list in memory but takes a full 3.55 seconds to execute ( ! ). Dealing with large lists, it appears that the "cons" function is many, many times faster.

            ·         FOREACH versus WHILE / NTH

            Let's say you need to cycle through a huge list, one list element at a time. There are two different functions that can cycle through a list, "foreach" and "nth" combined with a "while" loop. When dealing with a very large list, the "foreach" function can be much faster than using a while loop / nth function to index through the list.

            These tests use the 10,000 element list held in memory created be either of the above two tests. This next test uses "foreach" to cycle through the 10,000 element list.

            (defun c:test3 ( / )
              ; use 10,000 element "lst" created by test1 or test2
              (setq find_int (getint "\nFind integer="))
              (setq foundit nil)
              (foreach x lst
                (if (AND (not foundit) (= x find_int))
                  (progn
                    (setq foundit T)
                    (princ " found") 
                ) )   
              )
              (princ)
            )

            This next test does the same thing but uses a "while" loop and the "nth" function to index its way through the 10,000 element list:

            (defun c:test4 ( / )
              ; use 10,000 element "lst" created by test1 or test2
              (setq find_int (getint "\nFind integer="))
              (setq foundit nil)
              (setq ix 0)
              (setq slen (length lst))
              (while (AND (not foundit)(< ix slen))
                (if (= (nth ix lst) find_int) ; look for match
                  (progn ; Found the target element
                    (setq foundit T)
                    (princ " found") 
                ) )
                (setq ix (1+ ix))  
              )
              (princ)
            )

            For the test, looking for integer value 5000 (halfway into the list). The "foreach" function finds and exits in less than 0.01 second. The while loop using the "nth" function finds and exits in 0.07 seconds. Using foreach is significantly faster in processing this large list.

            posted on 2008-11-10 10:49 Mike Song 閱讀(352) 評論(0)  編輯 收藏 引用

            精品久久久久久久| 久久久女人与动物群交毛片| 国内精品伊人久久久久AV影院| 亚洲午夜久久久影院| 人妻久久久一区二区三区| 国内精品久久久久影院免费| 久久国产综合精品五月天| 中文字幕人妻色偷偷久久 | 91精品国产乱码久久久久久| 99久久精品费精品国产 | 国产成人久久777777| 一级a性色生活片久久无少妇一级婬片免费放 | 久久人人爽人人爽人人片av麻烦| 亚洲色大成网站www久久九| 7国产欧美日韩综合天堂中文久久久久| 久久久久综合国产欧美一区二区 | 午夜精品久久久久久中宇| 99久久国产综合精品网成人影院 | 无码8090精品久久一区| 国产亚洲婷婷香蕉久久精品| 久久精品国产亚洲av麻豆蜜芽| 久久99国产精品久久| 亚洲va久久久噜噜噜久久| 蜜臀久久99精品久久久久久| 久久r热这里有精品视频| 午夜欧美精品久久久久久久| 91麻豆国产精品91久久久| 青青青青久久精品国产h| 潮喷大喷水系列无码久久精品| 少妇人妻综合久久中文字幕| 久久中文精品无码中文字幕| 亚洲综合精品香蕉久久网97 | 国产精品一区二区久久国产| 久久www免费人成看片| 一级做a爰片久久毛片免费陪| 久久91这里精品国产2020| 狠狠色伊人久久精品综合网| 国产成人AV综合久久| 久久精品国产亚洲Aⅴ蜜臀色欲| 国产高清美女一级a毛片久久w| 久久免费小视频|