Wiki
Download
Manual
Eggs
API
Tests
Bugs
show
edit
history
You can edit this page using
wiki syntax
for markup.
Article contents:
== Juergen Lorenz {{ju (at) jugilo (dot) de}} I am a mathematician and a member of the "small is beautiful" crowd. And R5RS-Scheme is the definite example, that a small language is possible which allows one to do almost everything with it. And that in a clear syntax -- or should I better say -- with almost no syntax at all? And it is a programmable programming language! You can always add new syntax to it. In my mind, Chicken is the best Scheme implementation. Its compiler compiles to C in the most ingenious way, it has the simplest interface to C, and it has a beautiful infrastructure, the eggs system, a helpful community and, and, and ... === Chicken 5 Eggs ==== [[/eggref/5/anaphora|anaphora]] some anaphoric macros, some of them accompanied by equivalent named ones. ==== [[/eggref/5/arrays|arrays]] An implementation of functional arrays (of variable length) and - as an application - of sets. ==== [[/eggref/5/biglists|biglists]] an attempt to unify access to lists and lazy-lists, either finite or infinite. ==== [[/eggref/5/bindings|bindings]] A light-weight alternative to the matchable egg, with many enhancements. A number of binding macros is provided, which can destructure pseudolists and arbitrary mixtures of pseudolists, vectors and strings, as well as other sequence types, the client may add later. The most important one is bind, a variant of Common Lisp's destructuring-bind. ==== [[/eggref/5/callable-sequences|callable-sequences]] a common extendable functional interface to various flat and nested sequence types, including lists, pseudolists, vectors and strings. ==== [[/eggref/5/checks|checks]] Procedures and macros that help to check pre- and postconditions ==== [[/eggref/5/continuations|continuations]] some additional interfaces to continuations ==== [[/eggref/5/dotted-lambdas|dotted-lambdas]] a version of lambda, called lambda*, which accepts lists terminating with two, three or four dots referencing a list to its left of at most one, arbitrary many or at least one item respectively. ==== [[/eggref/5/generics|generics]] an implementation of generic functions ==== [[/eggref/5/holes|holes]] Transform expressions with holes into procedures with the holes as argument names. Here, a hole is symbol, consisting of zero or more digits enclosed in < and >. ==== [[/eggref/5/iterators|iterators]] a simple implementation of iterators and coroutines. ==== [[/eggref/5/list-comprehensions|list-comprehensions]] Some list creating procedures, in particular a variant of Clojure's for macro ==== [[/eggref/5/locals|locals]] Three simple macros inspired by ML's local definitions ==== [[/eggref/5/messages|messages]] An implementation of algebraic-types and abstract-types, based on messages, which are (functional) vectors tagged with a type keyword and a variant keyword. ==== [[/eggref/5/pipes|pipes]] piping partial combinations from left to right ==== [[/eggref/5/premodules|premodules]] creating a module-file, a tests-file and documentation automatically from one premodule file. ==== [[/eggref/5/procedural-macros|procedural-macros]] Some macros to facilitate the writing of procedural macros, including define-macro and macro-rules, which mimics syntax-rules. All destructure the macro-code automatically behind the scene, using macros from the bindings egg. Renaming is simplified as well. ==== [[/eggref/5/pseudolists|pseudolists]] Routines to handle pseudolists as a generalisation of lists. ==== [[/eggref/5/simple-cells|simple-cells]] Another simple implementation of the cell datatype, a lightweight variant of boxes. ==== [[/eggref/5/simple-contracts|simple-contracts]] design by contract for procedures. ==== [[/eggref/5/simple-exceptions|simple-exceptions]] An easy to use exception wrapper around chicken's condition system. ==== [[/eggref/5/simple-loops|simple-loops]] some simple loop macros. ==== [[/eggref/5/simple-sequences|simple-sequences]] common extensible interface to various sequence types, in particular lists, pairs, vectors, strings ==== [[/eggref/5/simple-tests|simple-tests]] Some simple macros and commands which help debugging and testing. ==== [[/eggref/5/skiplists|skiplists]] an implementation of skiplists ==== [[/eggref/5/tree-walkers|tree-walkers]] replacement of the nested car and cdr routines === Chicken 4 Eggs These eggs will no longer be maintained. Most of them are ported to Chicken 5. ==== [[/eggref/4/basic-macros|basic-macros]] Some macros which help to write procedural macros. For example, define-er-macro does the renaming and bind the destructuring automatically. bind and bind-case are simplyfied versions of the equally named macros in the bindings egg, which are sufficient for macro-writing. ==== [[/eggref/4/procedural-macros|procedural-macros]] Some macros which help to write procedural macros. For example, a hygienic version of define-macro and a procedural variant of syntax-rules, called macro-rules, which is as easy to use as the latter but much more powerfull. ==== [[/eggref/4/bindings|bindings]] A light-weight alternative to the matchable egg, with many enhancements. A number of binding macros is provided, which can destructure arbitrary mixtures of lists, pseudolists, vectors and strings, as well as arbitrary sequence types, the client may add later. The most important one is bind, a variant of Common Lisp's destructuring-bind. ==== [[/eggref/4/datatypes|datatypes]] An implementation of concrete and abstract types, the former beeing discriminated variant records, as advocated by Friedman, Wand and Haynes in "Essentials of programming languages" and ported to Chicken by Felix Winkelmann. The latter are based on the former, but hide the variant constructors and export constructor and accessor procedures instead. A simple object system is also provided. ==== [[/eggref/4/locals|locals]] Implementation of a local macro inspired by the equally named operation in ML. ==== [[/eggref/4/holes|holes]] Transform expressions with holes into procedures with the holes as argument names. Here, a hole is symbol, consisting of zero or more digits enclosed in bangs. ==== [[/eggref/4/list-comprehensions|list-comprehensions]] Some list creating procedures, in particular for and for* ==== [[/eggref/4/anaphora|anaphora]] Anaphoric macros, which are unhygienic by design. Most of them insert the special identifier "it" behind the scene. ==== [[/eggref/4/loops|loops]] Some simple loop macros. ==== [[/eggref/4/tuples|tuples]] Something like immutable random-access vectors, with empty, couples and triples as special cases, and mutable singles as a possible replacement of boxes. ==== [[/eggref/4/simple-cells|simple-cells]] Another simple implementation of the cell datatype, a lightweight variant of boxes. ==== [[/eggref/4/typed-lists|typed-lists]] a functor implementation of typed and immutable lists and sets. ==== [[/eggref/4/arrays|arrays]] An implementation of functional arrays and - as an application - of sets. ==== [[/eggref/4/basic-sequences|basic-sequences]] basic sequence-routines, which are used in bindings and can be used for a full-flegded sequence package ==== [[/eggref/4/generics|generics]] an implementation of generic functions, using selectors for dispatching and insertion. ==== [[/eggref/4/messages|messages]] implements messages as specialized generic functions of arity one, possibly parametrized. ==== [[/eggref/4/lazy-lists|lazy-lists]] lazy list implementation based on Moritz Heidkamp's lazy-seq. Contrary to Moritz' implementation, the lazy-list's length is stored in the datastructure, so that a distinction between finite and infinite lazy lists can be made. ==== [[/eggref/4/treaps|treaps]] A functional interface to Oleg Kiselyov's and Ivan Raikov's treap egg. ==== [[/eggref/4/skiplists|skiplists]] An alternative to balanced search-trees. ==== [[/eggref/4/random-access-lists|random-access-lists]] combine the advantages of linked lists (fast insert and remove) and vectors (fast access). ==== [[/eggref/4/simple-tests|simple-tests]] Some simple macros and commands which help debugging and testing. ==== [[/eggref/4/continuations|continuations]] Syntactic sugar for Marc Feeley's continuation interface providing i.a. catch and throw ==== [[/eggref/4/simple-exceptions|simple-exceptions]] An easy to use exception wrapper around chicken's condition system. ==== [[/eggref/4/options|options]] A variant of ML's option datatype, implemented as a functor producing typed modules and an untyped module. ==== [[/eggref/4/simple-contracts|simple-contracts]] Design by contract for procedures ==== [[/eggref/4/yasos|yasos]] A Chicken port of Kenneth A. Dickey's "Yet another Scheme Object System". === Obsolete eggs ==== [[/eggref/4/multi-methods|multi-methods]] Implements a variant of generic functions, where arguments are checked against predicates to choose a matching procedure which is eventually invoked. A destinctive feature of this implementation is, that the client has complete control over the multi-methods state, a search tree, and can decide where to insert a procedure to be eventually invoked, so that more specific procedures are found before less specific ones. Hence, multi-methods can be used to implement OOP. But note, that dispatching is done on all arguments, not only the first one, as in traditional OOP-implementations. Deprecated, use generics instead. ==== [[/eggref/4/cells|cells]] Simple implementation of the cell datatype, a lightweight variant of boxes. Deprecated, use simple-cells instead ==== [[/eggref/4/list-bindings|list-bindings]] Restricting some macros of the bindings egg to nested list expressions and supplying define-macro as an application. Obsolete, use bindings instead! ==== [[/eggref/4/er-macros|er-macros]] Explicit renaming macros made easy. Obsolete, use bindings instead! ==== [[/eggref/4/ir-macros|ir-macros]] Implicit renaming macros made even easier. Obsolete, use bindings instead! ==== [[/eggref/4/low-level-macros|low-level-macros]] Low level macros made easy. A merger of the two eggs er-macros and ir-macros. Obsolete, use bindings instead! ==== [[/eggref/4/dbc|dbc]] An implementation of "Design by Contract", coined by Bertrand Meyer for his Eiffel language. Now obsolete, use simple-contracts instead ==== [[/eggref/4/contracts|contracts]] My first implementation of "Design by Contract". Now obsolete, use dbc instead. === Tutorials ==== [[/explicit-renaming-macros|Explicit (and implicit) renaming macros made easy]] ==== [[/iup-tutor|The Iup GUI toolkit]] ==== [[/design-by-contract|Design by Contract]] ==== [[/records-and-oop| Object Orientation and SRFI-99 records]]
Description of your changes:
I would like to authenticate
Authentication
Username:
Password:
Spam control
What do you get when you subtract 22 from 16?