diff options
Diffstat (limited to 'emacs/.emacs.d/wpc/series.el')
-rw-r--r-- | emacs/.emacs.d/wpc/series.el | 52 |
1 files changed, 28 insertions, 24 deletions
diff --git a/emacs/.emacs.d/wpc/series.el b/emacs/.emacs.d/wpc/series.el index 55e97f278984..00be03a976f0 100644 --- a/emacs/.emacs.d/wpc/series.el +++ b/emacs/.emacs.d/wpc/series.el @@ -1,5 +1,9 @@ ;;; series.el --- Hosting common series of numbers -*- lexical-binding: t -*- + ;; Author: William Carroll <wpcarro@gmail.com> +;; Version: 0.0.1 +;; URL: https://git.wpcarro.dev/wpcarro/briefcase +;; Package-Requires: ((emacs "24")) ;;; Commentary: ;; Encoding number series as I learn about them. @@ -28,62 +32,62 @@ ;; Library ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -(defun series/range (beg end) +(defun series-range (beg end) "Create a list of numbers from `BEG' to `END'. This is an inclusive number range." (if (< end beg) - (list/reverse + (list-reverse (number-sequence end beg)) (number-sequence beg end))) -(defun series/fibonacci-number (i) +(defun series-fibonacci-number (i) "Return the number in the fibonacci series at `I'." (cond ((= 0 i) 0) ((= 1 i) 1) - (t (+ (series/fibonacci-number (- i 1)) - (series/fibonacci-number (- i 2)))))) + (t (+ (series-fibonacci-number (- i 1)) + (series-fibonacci-number (- i 2)))))) -(defun series/fibonacci (n) +(defun series-fibonacci (n) "Return the first `N' numbers of the fibonaccci series starting at zero." (if (= 0 n) '() - (list/reverse - (list/cons (series/fibonacci-number (number/dec n)) - (list/reverse - (series/fibonacci (number/dec n))))))) + (list-reverse + (list-cons (series-fibonacci-number (number-dec n)) + (list-reverse + (series-fibonacci (number-dec n))))))) ;; TODO: Consider memoization. -(defun series/triangular-number (i) +(defun series-triangular-number (i) "Return the number in the triangular series at `I'." (if (= 0 i) 0 - (+ i (series/triangular-number (number/dec i))))) + (+ i (series-triangular-number (number-dec i))))) ;; TODO: Improve performance. ;; TODO: Consider creating a stream protocol with `stream/next' and implement ;; this using that. -(defun series/triangular (n) +(defun series-triangular (n) "Return the first `N' numbers of a triangular series starting at 0." (if (= 0 n) '() - (list/reverse - (list/cons (series/triangular-number (number/dec n)) - (list/reverse - (series/triangular (number/dec n))))))) + (list-reverse + (list-cons (series-triangular-number (number-dec n)) + (list-reverse + (series-triangular (number-dec n))))))) -(defun series/catalan-number (i) +(defun series-catalan-number (i) "Return the catalan number in the series at `I'." (if (= 0 i) 1 - (/ (number/factorial (* 2 i)) - (* (number/factorial (number/inc i)) - (number/factorial i))))) + (/ (number-factorial (* 2 i)) + (* (number-factorial (number-inc i)) + (number-factorial i))))) -(defun series/catalan (n) +(defun series-catalan (n) "Return the first `N' numbers in a catalan series." - (->> (series/range 0 (number/dec n)) - (list/map #'series/catalan-number))) + (->> (series-range 0 (number-dec n)) + (list-map #'series-catalan-number))) (provide 'series) ;;; series.el ends here |