aboutsummaryrefslogtreecommitdiff
path: root/lisp/002-even_fibonacci_numbers.lisp
diff options
context:
space:
mode:
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*))