1. ;;;开发过程,图元多时对速度要求较高,特写此程序测试
    2. ;;;师兄:QQ 361865648
    3. ;;;实验结果:vl-remove-if最快,foreach次之
    4. ;;;repeatwhile每次都一样
    5. ;;;repeat表条件筛选速度测试,参考:15.75
    6. (defun c:tt1 (/ s seconds lst mylst i s2 seconds2)
    7. (setq s (getvar "DATE"))
    8. (setq seconds (* 86400.0 (- s (fix s))))
    9. (setq lst (ATOMS-FAMILY 1))
    10. (setq n(length lst) lst1 lst)
    11. (repeat 1000
    12. (setq i 0
    13. mylst nil
    14. lst1 lst
    15. )
    16. (repeat n
    17. ;(setq thisitm (nth i lst)
    18. ; i (1+ i)
    19. ;)
    20. (setq thisitm (car lst1) lst1 (cdr lst1))
    21. (if (= "A" (substr thisitm 1 1))
    22. (setq mylst (cons thisitm mylst))
    23. )
    24. )
    25. )
    26. (setq mylst (REVERSE ylst));_这行对速度基本没影响
    27. (setq s2 (getvar "DATE"))
    28. (setq seconds2 (* 86400.0 (- s2 (fix s2))))
    29. (princ
    30. (strcat "\ntt1 Repeat 运行时间:" (rtos (- seconds2 seconds) 2 2) " 秒")
    31. )
    32. )
    33. ;(defun c:tt1 (/ s seconds lst mylst i s2 seconds2)
    34. ; (setq s (getvar "DATE"))
    35. ; (setq seconds (* 86400.0 (- s (fix s))))
    36. ; (setq lst (ATOMS-FAMILY 1))
    37. ; (setq n(length lst))
    38. ; (repeat 100
    39. ; (setq i 0
    40. ; mylst nil
    41. ; )
    42. ; (repeat n
    43. ; (setq thisitm (nth i lst)
    44. ; i (1+ i)
    45. ; )
    46. ; (if (= "A" (substr thisitm 1 1))
    47. ; (setq mylst (cons thisitm mylst))
    48. ; )
    49. ; )
    50. ; )
    51. ; (setq mylst (REVERSE ylst));_这行对速度基本没影响
    52. ; (setq s2 (getvar "DATE"))
    53. ; (setq seconds2 (* 86400.0 (- s2 (fix s2))))
    54. ; (princ
    55. ; (strcat "\n tt1 运行时间:" (rtos (- seconds2 seconds) 2 2) " 秒")
    56. ; )
    57. ;)
    58. ;;;vl-remove-if-not表条件筛选速度测试 参考:11.79
    59. (defun c:tt2 (/ s seconds lst mylst s2 seconds2)
    60. (setq s (getvar "DATE"))
    61. (setq seconds (* 86400.0 (- s (fix s))))
    62. (setq lst (ATOMS-FAMILY 1))
    63. (repeat 1000
    64. (setq mylst (vl-remove-if
    65. '(lambda (x)
    66. (/= "A" (substr x 1 1))
    67. )
    68. lst
    69. )
    70. )
    71. )
    72. (setq s2 (getvar "DATE"))
    73. (setq seconds2 (* 86400.0 (- s2 (fix s2))))
    74. (princ
    75. (strcat "\ntt2 Vl-Remove-If 运行时间:" (rtos (- seconds2 seconds) 2 2) " 秒")
    76. )
    77. )
    78. ;;;foreach表条件筛选速度测试 参考:14.36 秒
    79. (defun c:tt3 (/ s seconds lst mylst itm s2 seconds2)
    80. (setq s (getvar "DATE"))
    81. (setq seconds (* 86400.0 (- s (fix s))))
    82. (setq lst (ATOMS-FAMILY 1))
    83. (repeat 1000
    84. (setq mylst nil)
    85. (foreach itm lst
    86. (if (= "A" (substr itm 1 1))
    87. (setq mylst (cons itm mylst))
    88. )
    89. )
    90. )
    91. (setq mylst (REVERSE mylst));_这行对速度基本没影响
    92. (setq s2 (getvar "DATE"))
    93. (setq seconds2 (* 86400.0 (- s2 (fix s2))))
    94. (princ
    95. (strcat "\ntt3 Foreach 运行时间:" (rtos (- seconds2 seconds) 2 2) " 秒")
    96. )
    97. )
    98. ;;;while表条件筛选速度测试,每次和tt1都一样:17.15 秒
    99. (defun c:tt4 (/ i len s seconds lst mylst itm s2 seconds2)
    100. (setq s (getvar "DATE"))
    101. (setq seconds (* 86400.0 (- s (fix s))))
    102. (setq lst (ATOMS-FAMILY 1))
    103. (setq len(length lst) )
    104. (repeat 1000
    105. (setq mylst nil i 0 lst1 lst)
    106. (while (< i len)
    107. ;(setq itm(nth i lst))
    108. (setq itm (car lst1) lst1 (cdr lst1))
    109. (if (= "A" (substr itm 1 1))
    110. (setq mylst (cons itm mylst))
    111. )
    112. (setq i(1+ i))
    113. )
    114. )
    115. (setq mylst (REVERSE mylst));_这行对速度基本没影响
    116. (setq s2 (getvar "DATE"))
    117. (setq seconds2 (* 86400.0 (- s2 (fix s2))))
    118. (princ
    119. (strcat "\ntt4 While 运行时间:" (rtos (- seconds2 seconds) 2 2) " 秒")
    120. )
    121. )
    122. ;(defun c:tt4 (/ i len s seconds lst mylst itm s2 seconds2)
    123. ; (setq s (getvar "DATE"))
    124. ; (setq seconds (* 86400.0 (- s (fix s))))
    125. ; (setq lst (ATOMS-FAMILY 1))
    126. ; (setq len(length lst) )
    127. ; (repeat 100
    128. ; (setq mylst nil i 0)
    129. ;
    130. ; (while (< i len)
    131. ; (setq itm(nth i lst))
    132. ; (if (= "A" (substr itm 1 1))
    133. ; (setq mylst (cons itm mylst))
    134. ; )
    135. ; (setq i(1+ i))
    136. ; )
    137. ; )
    138. ; (setq mylst (REVERSE mylst));_这行对速度基本没影响
    139. ; (setq s2 (getvar "DATE"))
    140. ; (setq seconds2 (* 86400.0 (- s2 (fix s2))))
    141. ; (princ
    142. ; (strcat "\ntt3 运行时间:" (rtos (- seconds2 seconds) 2 2) " 秒")
    143. ; )
    144. ;)
    145. ;;;mapcar表条件筛选速度测试,每次和tt1都一样:11.68 秒
    146. (defun c:tt5 (/ i len s seconds lst mylst itm s2 seconds2)
    147. (setq s (getvar "DATE"))
    148. (setq seconds (* 86400.0 (- s (fix s))))
    149. (setq lst (ATOMS-FAMILY 1))
    150. (setq len(length lst) )
    151. (repeat 1000
    152. (setq mylst nil i 0 )
    153. (mapcar '(lambda (itm)
    154. (if (= "A" (substr itm 1 1))
    155. (setq mylst (cons itm mylst))
    156. )
    157. )
    158. lst)
    159. )
    160. (setq mylst (REVERSE mylst));_这行对速度基本没影响
    161. (setq s2 (getvar "DATE"))
    162. (setq seconds2 (* 86400.0 (- s2 (fix s2))))
    163. (princ
    164. (strcat "\ntt5 Mapcar 运行时间:" (rtos (- seconds2 seconds) 2 2) " 秒")
    165. )
    166. )
    167. (c:tt1)
    168. (c:tt2)
    169. (c:tt3)
    170. (c:tt4)
    171. (c:tt5)
    172. (prin1)