From 9af65c8ac721024d0e45a2a6bde5c3f9fe638516 Mon Sep 17 00:00:00 2001 From: Charles Date: Tue, 7 Apr 2020 17:20:43 +0200 Subject: problem 1 2 4 in common lisp --- lisp/002-even_fibonacci_numbers.lisp | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 lisp/002-even_fibonacci_numbers.lisp (limited to 'lisp/002-even_fibonacci_numbers.lisp') 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*)) -- cgit