8000 GitHub - diegogub/CIEL: CIEL Is an Extended Lisp
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

diegogub/CIEL

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

33 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

EARLY LOW QUALITY DRAFT

CIEL Is an Extended Lisp

Packages:

  • ciel-user
  • generic-ciel: uses generic-cl instead of cl (todo)

What is this ?

Common Lisp, batteries included.

TODOs

  • settle on libraries that help newcomers
  • automate the documentation
  • distribute (Quicklisp, Qlot, Quicklisp distribution, Ultralisp, Ultralisp distribution (upcoming)…)
  • ship a binary
  • optionnal: create a tool that, given a CIEL code base, explains what packages to import in order to switch to “plain CL”.

How to procede ?

This is an experiment. I’d be happy to give push rights to more maintainers. We will send pull requests, discuss, and in case we don’t find a consensus for what should be on by default, we can create other packages.

Rules

  • don’t install libraries that need a Slime helper to work in the REPL (cl-annot).
  • reader syntax changes may not be enabled by default.

Install

Clone, load the .asd, (ql:quickload "ciel") and (in-package :ciel-user).

CIEL is on Ultralisp.

Libraries

Data structures

access, generic and nested access to all common datastructures

https://github.com/AccelerationNet/access/

It’s always

(access my-structure :elt)

hash-table utilities

We import functions from Serapeum. https://github.com/ruricolist/serapeum/blob/master/REFERENCE.md#hash-tables

sequences

https://github.com/ruricolist/serapeum/blob/master/REFERENCE.md#sequences

str, a string manipulation library

Available with the str prefix.

https://github.com/vindarel/cl-str/

Data formats

JSON

CSV

Databases

Mito and SxQL

https://lispcookbook.github.io/cl-cookbook/databases.html

Pattern matching

Use Trivia, also available with the match local nickname.

Numbers

parse-float

https://github.com/soemraws/parse-float

parse-number

https://github.com/sharplispers/parse-number

Parsing numbers, floats, decimals

cl-decimals: parse and format decimal numbers

https://github.com/tlikonen/cl-decimals

The main interface are the functions parse-decimal-number and format-decimal-number. The former is for parsing strings for decimal numbers and the latter for pretty-printing them as strings.

Reading:

DECIMALS> (parse-decimal-number "0.24")
6/25


DECIMALS> (parse-decimal-number "−12,345"
                                :decimal-separator #\,
                                :negative-sign #\−)
-2469/200

Parsing:

DECIMALS> (format-decimal-number -100/6 :round-magnitude -3)
"-16.667"
("-" "16" "." "667")

DECIMALS> (loop for e from -5 upto 5
                do (print (format-decimal-number
                           (expt 10 e) :round-magnitude -5
                           :decimal-separator ","
                           :integer-minimum-width 7
                           :integer-group-separator " "
                           :fractional-minimum-width 7
                           :fractional-group-separator " ")))

"      0,000 01"
"      0,000 1 "
"      0,001   "
"      0,01    "
"      0,1     "
"      1       "
"     10       "
"    100       "
"  1 000       "
" 10 000       "
"100 000       "
NIL

Regular expressions

Use ppcre.

Threads, monitoring, scheduling

Bordeaux-Threads (bt prefix)

Lparallel

Moira: https://github.com/ruricolist/moira (monitor and restart background threads)

http://quickdocs.org/trivial-monitored-thread/

Trivial Monitored Thread offers a very simple (aka trivial) way of spawning threads and being informed when one any of them crash and die.

cl-cron http://quickdocs.org/cl-cron/api

Web

Imported:

  • Hunchentoot
  • Easy-routes
  • Djula
  • Spinneret
  • Quri

https://lispcookbook.github.io/cl-cookbook/web.html

Syntax extensions

Pythonic triple quotes docstring

https://github.com/smithzvk/pythonic-string-reader

We can use triple quotes for docstrings, and double quotes within them.

(defun foo ()
  """foo "bar"."""
  t)

Lambda shortcuts

You have to enable cl-punch’s syntax yourself.

https://github.com/windymelt/cl-punch/ - Scala-like anonymous lambda literal.

(cl-punch:enable-punch-syntax)
;; ^() is converted into (lambda ...) .
;; Each underscore is converted into a lambda argument.

(mapcar ^(* 2 _) '(1 2 3 4 5))
;; => '(2 4 6 8 10)

;; One underscore corresponds one argument.

(^(* _ _) 2 3)
;; => 6

;; <_ reuses last argument.

(mapcar ^(if (oddp _) (* 2 <_) <_) '(1 2 3 4 5))
;; => '(2 2 6 4 10)

;; _! corresponds one argument but it is brought to top of the argument list.
;; It can be useful when you want to change argument order.

(^(cons _ _!) :a :b)
;; => (:b . :a)

(^(list _! _! _!) 1 2 3)
;; => '(3 2 1)

Other utilities

Logging (log4cl)

https://github.com/sharplispers/log4cl/

(log:info …)

repl-utilities (readme, summary,…)

repl-utilities:

(repl-utilities:readme repl-utilities)

printv

https://github.com/danlentz/printv

 (:printv
  (defvar *y*)
  (defparameter *x* 2)
  (setf *y* (sqrt *x*))
  (setf *y* (/ 1 *y*)))

;; This produces the following text to PRINTV's output stream, and still results in the same returned value: 0.70710677.

;;;   (DEFVAR *Y*) => *Y*
;;;   (DEFPARAMETER *X* 2) => *X*
;;;   (SETF *Y* (SQRT *X*)) => 1.4142135
;;;   (SETF *Y* (/ 1 *Y*)) => 0.70710677

Getting a function’s arguments list (trivial-arguments)

https://github.com/Shinmera/trivial-arguments

(defun foo (a b c &optional d) nil)
(arglist #'foo)
;; (a b c &optional d)

generic-cl

https://github.com/alex-gutev/generic-cl/

todo:

generic-ciel

Example:

;; with a struct or class "point":
(defmethod equalp ((p1 point) (p2 point))
   (…))

Final words

That was your life in CL:

and now:

About

CIEL Is an Extended Lisp

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • Common Lisp 100.0%
0