aboutsummaryrefslogtreecommitdiff
path: root/lisp/002-even_fibonacci_numbers.lisp
diff options
context:
space:
mode:
authorCharles <sircharlesaze@gmail.com>2020-04-07 17:20:43 +0200
committerCharles <sircharlesaze@gmail.com>2020-04-07 17:20:43 +0200
commit9af65c8ac721024d0e45a2a6bde5c3f9fe638516 (patch)
treee9af93ce9e4d0263b2e76d2fd29ada90d313f334 /lisp/002-even_fibonacci_numbers.lisp
parent31b43cf6d0d58812d30c0e2356f6458d06b1e52e (diff)
downloadproject_euler-9af65c8ac721024d0e45a2a6bde5c3f9fe638516.tar.gz
project_euler-9af65c8ac721024d0e45a2a6bde5c3f9fe638516.tar.bz2
project_euler-9af65c8ac721024d0e45a2a6bde5c3f9fe638516.zip
problem 1 2 4 in common lisp
Diffstat (limited to 'lisp/002-even_fibonacci_numbers.lisp')
-rw-r--r--lisp/002-even_fibonacci_numbers.lisp24
1 files changed, 24 insertions, 0 deletions
diff --git a/lisp/002-even_fibonacci_numbers.lisp b/lisp/002-even_fibonacci_numbers.lisp
new file mode 100644
index 0000000..be9ed74
--- /dev/null
+++ b/lisp/002-even_fibonacci_numbers.lisp
@@ -0,0 +1,24 @@
+;;;; ;;;;;;;;
+;;;; Even Fibonacci numbers
+;;;; Problem 2
+;;;;
+;;;; Each new term in the Fibonacci sequence is generated by adding the previous two terms.
+;;;; By starting with 1 and 2, the first 10 terms will be:
+;;;; 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...
+;;;; By considering the terms in the Fibonacci sequence whose values do not exceed four million,
+;;;; find the sum of the even-valued terms.
+;;;; ;;;;;;;;
+
+(defun sum (xs)
+ (if (null xs)
+ 0
+ (+ (car xs) (sum (cdr xs)))))
+
+(defun fib (x y)
+ (when (> x 4000000) (return-from fib ()))
+ (cons x (fib y (+ x y))))
+
+(defvar *fibs-below-4m* (fib 1 2))
+
+(setf *fibs-below-4m* (remove-if-not #'evenp *fibs-below-4m*))
+(print (sum *fibs-below-4m*))