From: Elvin P. <elv...@ya...> - 2004-06-24 18:22:15
|
Hello, I have an function (described below), which crashes clisp for inputs greater than 1500. The limit is substantially larger if the function is compiled. An empty stackdump file is generated under cygwin. [18]> (eratosthenes 1500) $ I suspect this might be a problem with large lists, but shouldn't there be a graceful recovery and a message rather than a crash? $ clisp --version GNU CLISP 2.33 (2004-03-17) (built on winsteingoldlap [10.0.19.22]) Software: GNU C 3.3.1 (cygming special) ANSI C program Features: (CLOS LOOP COMPILER CLISP ANSI-CL COMMON-LISP LISP=CL INTERPRETER SOCKETS GENERIC-STREAMS LOGICAL-PATHNAMES SCREEN FFI GETTEXT UNICODE BASE-CHAR=CHARACTER UNIX CYGWIN) Installation directory: /usr/lib/clisp/ User language: ENGLISH TIA. ;; Implements the sieve of Eratosthenes (defun generate-list (n) "Provides the list 2...n" (labels ((generate-reversed-list (n) "Generates the list 2...n in the reverse order" (if (= n 2) (cons 2 nil) (cons n (generate-reversed-list (1- n)))))) (reverse (generate-reversed-list n)))) (defun sieve (x n) "The actual sieve, repeatedly deleting multiples." (labels ((multiple-of (x y) "Is the number a multiple (greater than 2)?" (and (integerp (/ x y)) (> x y)))) (if (> n (sqrt (first (last x)))) ;no need to check for numbers > sqrt (n) x ;stopping condition for the recursion (sieve (delete-if #'(lambda (num) (multiple-of num (nth (1- n) x))) x) ;delete multiples of positions starting (1+ n))))) ;from n, incrementing by 1 (defun eratosthenes (n) "Find all primes till n" (sieve (generate-list n) 1)) ;start the sieve using the first element __________________________________ Do you Yahoo!? Take Yahoo! Mail with you! Get it on your mobile phone. http://mobile.yahoo.com/maildemo |