aboutsummaryrefslogtreecommitdiff
path: root/lib.functions.lisp
blob: 30c1e644a4fe8a771bde7e9e4a0f213a87114c84 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
;;; lib.functions.lisp - 2025-02-09

;; Copyright (C) 2025 Aryadev Chavali

;; This program is distributed in the hope that it will be useful, but WITHOUT
;; ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
;; FOR A PARTICULAR PURPOSE.  See the GNU General Public License Version 2 for
;; details.

;; You may distribute and modify this code under the terms of the GNU General
;; Public License Version 2, which you should have received a copy of along with
;; this program.  If not, please go to <https://www.gnu.org/licenses/>.

;;; Commentary:

;; Helpful functions for usage throughout the project.

;;; Code:

(in-package :lib.functions)

(fn range (start end &optional (step 1)) (-> (fixnum fixnum &optional fixnum) list)
  "Make a list of numbers from START to END (exclusive).  If STEP is given, then
each member is STEP distance apart."
  (if (<= end start)
      (error (format nil "~a < ~a" end start))
      (loop :for i :from start :to (1- end) :by step
            :collect i)))

(fn parse-integer* (inp) (-> (string) (or integer list))
  (parse-integer inp :junk-allowed t))

(fn take (n lst) (-> (fixnum list) list)
  (subseq lst 0 n))