axiom-developer
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Axiom-developer] A first attempt at a notangle in Lisp


From: Waldek Hebisch
Subject: Re: [Axiom-developer] A first attempt at a notangle in Lisp
Date: Fri, 16 Feb 2007 13:44:50 +0100 (CET)

> I hesitate to say it's useful, but I have what appears to be a (more or
> less) working notangle command in lisp.  It successfully handles a
> couple test files, and although I haven't inspected the results it
> handled most of the contents of boot and interp without crashing. 
> Unfortunately it's performance is worse than abysmal.  

Your method of appending content to a chunk was quadratic.  Below
is a diff changing this to linear method, gives much better speed (at
least on "nag-e02.boot.pamphlet") but still much slower than Debian
notangle (0.48s sbcl, 0.028s system version).  AFAICS reading
pamphlets is still slow (takes 0.4s on "nag-e02.boot.pamphlet").


--- cl-notangle.lisp.pamphlet   2007-02-16 11:57:23.000000000 +0100
+++ cl-notangle.lisp.pamphlet   2007-02-16 13:03:47.000000000 +0100
@@ -365,13 +365,21 @@
 
 <<readin-chunk>>=
 (defun read-in-chunk (curr-chunk-name filename)
-  (let ((nextline (read-line filename nil)))
-    (if (or (not (search endchunkchars nextline)) 
-            (search (concatenate 'string (string #\") endchunkchars)
-                    nextline)) 
-       (progn
-         (add-to-chunk-contents curr-chunk-name nextline)
-         (read-in-chunk curr-chunk-name filename)))))
+  (let ((lines nil))
+     (loop for nextline = (read-line filename nil)
+            while (or (not (search endchunkchars nextline))
+                       (search (concatenate 'string (string #\") endchunkchars)
+                                nextline))
+            do
+                  (progn
+                     (push nextline lines)
+                     (push (string #\Newline) lines)))
+      (if lines
+         (progn
+            (pop lines)
+            (add-to-chunk-contents curr-chunk-name
+                            (apply #'concatenate 'string 
+                                 (reverse lines)))))))
 
 @
 


-- 
                              Waldek Hebisch
address@hidden 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]