package.lisp @ 21296e2bf834

Add `when-let*`
author Steve Losh <steve@stevelosh.com>
date Thu, 17 Nov 2016 12:44:46 +0000
parents 0e60bff93317
children 344ee2fa239e
(defpackage :losh.internal
  (:use :cl))

(in-package :losh.internal)

(eval-when (:compile-toplevel :load-toplevel :execute)
  (defun external-symbols (package)
    (let ((symbols nil))
      (do-external-symbols (s (find-package package) symbols)
        (push s symbols)))))

(defmacro defpackage-inheriting (name parent-packages &rest args)
  `(defpackage ,name
     ,@args
     ,@(loop :for parent-package :in parent-packages
             :collect
             `(:use ,parent-package)
             :collect
             `(:export ,@(external-symbols parent-package)))))


(defpackage :losh.math
  (:documentation "Utilities related to math and numbers.")
  (:export
    :tau
    :tau/2
    :1/2tau
    :tau/4
    :1/4tau
    :2/4tau
    :3/4tau
    :tau/8
    :1/8tau
    :2/8tau
    :3/8tau
    :4/8tau
    :5/8tau
    :6/8tau
    :7/8tau

    :radians
    :degrees
    :square
    :dividesp
    :norm
    :lerp
    :precise-lerp
    :map-range
    :clamp))

(defpackage :losh.random
  (:documentation "Utilities related to randomness.")
  (:export
    :randomp
    :random-elt
    :random-range
    :random-range-exclusive
    :random-around
    :random-gaussian
    :random-gaussian-integer
    :d))

(defpackage :losh.functions
  (:documentation "Utilities for working with higher-order functions.")
  (:export
    :juxt
    :nullary
    :fixed-point))

(defpackage :losh.control-flow
  (:documentation "Utilities for managing control flow.")
  (:export
    :recursively
    :recur
    :when-found
    :if-found
    :gathering
    :gather
    :when-let*))

(defpackage :losh.mutation
  (:documentation "Utilities for mutating places in-place.")
  (:export
    :zapf
    :%
    :mulf
    :divf
    :modf
    :remainderf
    :clampf
    :negatef
    :notf
    :callf))

(defpackage :losh.lists
  (:documentation "Utilities related to lists.")
  (:export
    :take))

(defpackage :losh.arrays
  (:documentation "Utilities related to arrays.")
  (:export
    :do-array
    :fill-multidimensional-array
    :fill-multidimensional-array-t
    :fill-multidimensional-array-fixnum
    :fill-multidimensional-array-single-float))

(defpackage :losh.queues
  (:documentation "A simple queue implementation.")
  (:export
    :queue
    :make-queue
    :queue-contents
    :queue-size
    :queue-empty-p
    :enqueue
    :dequeue
    :queue-append))

(defpackage :losh.iterate
  (:use :iterate) ; need this for iterate's `for` symbol fuckery
  (:documentation "Custom `iterate` drivers and clauses.")
  (:export
    :pairs-of-list
    :averaging
    :into
    :timing
    :since-start-into
    :per-iteration-into
    :real-time
    :run-time
    :in-lists
    :in-sequences
    :in-whatever
    :in-array
    :across-flat-array
    :index-of-flat-array
    :cycling
    :for-nested
    :within-radius
    :skip-origin
    :macroexpand-iterate))

(defpackage :losh.hash-tables
  (:documentation "Utilities for operating on hash tables.")
  (:export
    :mutate-hash-values))

(defpackage :losh.sequences
  (:documentation "Utilities for operating on sequences.")
  (:export
    :prefix-sums
    :frequencies
    :proportions
    :group-by))

(defpackage :losh.debugging
  (:documentation "Utilities for figuring out what the hell is going on.")
  (:export
    :pr
    :bits
    :shut-up
    :dis
    :comment
    :aesthetic-string
    :structural-string
    #+sbcl :start-profiling
    #+sbcl :stop-profiling
    :print-table
    :print-hash-table))

(defpackage :losh.weightlists
  (:documentation
    "A simple data structure for choosing random items with weighted probabilities.")
  (:export
    :weightlist
    :weightlist-weights
    :weightlist-items
    :make-weightlist
    :weightlist-random))

(defpackage :losh.licensing
  (:documentation "Utilities related to open source licenses.")
  (:export
    :print-licenses))

(defpackage :losh.eldritch-horrors
  (:documentation "Abandon all hope, ye who enter here.")
  (:export
    :dlambda
    :define-with-macro))


(defpackage-inheriting :losh
  (:losh.arrays

   :losh.control-flow
   :losh.debugging
   :losh.eldritch-horrors
   :losh.functions
   :losh.hash-tables
   :losh.iterate
   :losh.licensing
   :losh.lists
   :losh.math
   :losh.mutation
   :losh.queues
   :losh.random
   :losh.sequences
   :losh.weightlists

   )
  (:use
    :cl
    :iterate
    :losh.quickutils)
  (:documentation
    "This package exports all of the symbols in the other packages.

  If you just want to get everything you can `:use` this one and be done with
  it.  Otherwise you can `:use` only the ones you need.

  "))


;;;; Remember to add it to the docs!