source: project/wiki/users/juergen-lorenz @ 38047

Last change on this file since 38047 was 38047, checked in by juergen, 7 months ago

user juergen-lorenz updated

File size: 9.6 KB
Line 
1== Juergen Lorenz
2
3{{ju (at) jugilo (dot) de}}
4
5I 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.
6
7In 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 ...
8
9=== Chicken 5 Eggs
10
11==== [[/eggref/5/arrays|arrays]]
12
13An implementation of functional arrays (of variable length) and
14- as an application - of sets.
15
16==== [[/eggref/5/biglists|biglists]]
17
18an attempt to unify access to lists and lazy-lists, either finite or
19infinite.
20
21==== [[/eggref/5/bindings|bindings]]
22
23A light-weight alternative to the matchable egg, with many enhancements.
24
25A number of binding macros is provided, which can destructure
26pseudolists and arbitrary mixtures of pseudolists, vectors and strings,
27as well as other sequence types, the client may add later. The most
28important one is bind, a variant of Common Lisp's destructuring-bind.
29
30==== [[/eggref/5/checks|checks]]
31
32Procedures and macros that help to check pre- and postconditions
33
34==== [[/eggref/5/continuations|continuations]]
35
36some additional interfaces to continuations
37
38==== [[/eggref/5/generics|generics]]
39
40an implementation of generic functions
41
42==== [[/eggref/5/holes|holes]]
43
44Transform expressions with holes into procedures with the holes as
45argument names. Here, a hole is symbol, consisting of zero or more
46digits enclosed in < and >.
47
48==== [[/eggref/5/iterators|iterators]]
49
50a simple implementation of iterators and coroutines.
51
52==== [[/eggref/5/list-comprehensions|list-comprehensions]]
53
54Some list creating procedures, in particular a variant of
55Clojure's for macro
56
57==== [[/eggref/5/locals|locals]]
58
59Three simple macros inspired by ML's local definitions
60
61==== [[/eggref/5/messages|messages]]
62
63An implementation of algebraic-types and abstract-types, based on
64messages, which are (functional) vectors tagged with a type keyword and
65a variant keyword.
66
67==== [[/eggref/5/pipes|pipes]]
68
69piping partial combinations from left to right
70
71==== [[/eggref/5/procedural-macros|procedural-macros]]
72
73Some macros to facilitate the writing of procedural macros,
74including define-macro and macro-rules, which mimics syntax-rules.
75All destructure the macro-code automatically behind the scene, using
76macros from the bindings egg. Renaming is simplified as well.
77
78==== [[/eggref/5/pseudolists|pseudolists]]
79
80Routines to handle pseudolists as a generalisation of lists.
81
82==== [[/eggref/5/simple-cells|simple-cells]]
83
84Another simple implementation of the cell datatype, a lightweight variant of
85boxes.
86
87==== [[/eggref/5/simple-contracts|simple-contracts]]
88
89design by contract for procedures.
90
91==== [[/eggref/5/simple-exceptions|simple-exceptions]]
92
93An easy to use exception wrapper around chicken's condition system.
94
95==== [[/eggref/5/simple-loops|simple-loops]]
96
97some simple loop macros.
98
99==== [[/eggref/5/simple-tests|simple-tests]]
100
101Some simple macros and commands which help debugging and testing.
102
103==== [[/eggref/5/skiplists|skiplists]]
104
105an implementation of skiplists
106
107=== Chicken 4 Eggs
108
109These eggs will no longer be maintained.
110Most of them will be ported to Chicken 5.
111
112==== [[/eggref/4/basic-macros|basic-macros]]
113
114Some macros which help to write procedural macros. For example,
115define-er-macro does the renaming and bind the destructuring
116automatically. bind and bind-case are simplyfied versions of the equally
117named macros in the bindings egg, which are sufficient for
118macro-writing.
119
120==== [[/eggref/4/procedural-macros|procedural-macros]]
121
122Some macros which help to write procedural macros. For example, a
123hygienic version of define-macro and a procedural variant of
124syntax-rules, called macro-rules, which is as easy to use as the latter
125but much more powerfull.
126
127==== [[/eggref/4/bindings|bindings]]
128
129A light-weight alternative to the matchable egg, with many enhancements.
130
131A number of binding macros is provided, which can destructure arbitrary
132mixtures of lists, pseudolists, vectors and strings, as well as
133arbitrary sequence types, the client may add later. The most important
134one is bind, a variant of Common Lisp's destructuring-bind.
135
136==== [[/eggref/4/datatypes|datatypes]]
137
138An implementation of concrete and abstract types, the former beeing
139discriminated variant records, as advocated by Friedman, Wand and Haynes
140in "Essentials of programming languages" and ported to Chicken by Felix
141Winkelmann. The latter are based on the former, but hide the variant
142constructors and export constructor and accessor procedures instead.
143A simple object system is also provided.
144
145==== [[/eggref/4/locals|locals]]
146
147Implementation of a local macro inspired by the equally named operation
148in ML.
149
150==== [[/eggref/4/holes|holes]]
151
152Transform expressions with holes into procedures with the holes as
153argument names. Here, a hole is symbol, consisting of zero or more
154digits enclosed in bangs.
155
156==== [[/eggref/4/list-comprehensions|list-comprehensions]]
157
158Some list creating procedures, in particular for and for*
159
160==== [[/eggref/4/anaphora|anaphora]]
161
162Anaphoric macros, which are unhygienic by design. Most of them insert
163the special identifier "it" behind the scene.
164
165==== [[/eggref/4/loops|loops]]
166
167Some simple loop macros.
168
169==== [[/eggref/4/tuples|tuples]]
170
171Something like immutable random-access vectors, with empty, couples and
172triples as special cases, and mutable singles as a possible replacement
173of boxes.
174
175==== [[/eggref/4/simple-cells|simple-cells]]
176
177Another simple implementation of the cell datatype, a lightweight variant of
178boxes.
179
180==== [[/eggref/4/typed-lists|typed-lists]]
181
182a functor implementation of typed and immutable lists and sets.
183
184==== [[/eggref/4/arrays|arrays]]
185
186An implementation of functional arrays and - as an application - of
187sets.
188
189==== [[/eggref/4/basic-sequences|basic-sequences]]
190
191basic sequence-routines, which are used in bindings and can be used for
192a full-flegded sequence package
193
194==== [[/eggref/4/generics|generics]]
195
196an implementation of generic functions, using selectors for dispatching
197and insertion.
198
199==== [[/eggref/4/messages|messages]]
200
201implements messages as specialized generic functions of arity one,
202possibly parametrized.
203
204==== [[/eggref/4/lazy-lists|lazy-lists]]
205
206lazy list implementation based on Moritz Heidkamp's lazy-seq. Contrary
207to Moritz' implementation, the lazy-list's length is stored in the
208datastructure, so that a distinction between finite and infinite lazy
209lists can be made.
210
211==== [[/eggref/4/treaps|treaps]]
212
213A functional interface to Oleg Kiselyov's and Ivan Raikov's treap egg.
214
215==== [[/eggref/4/skiplists|skiplists]]
216
217An alternative to balanced search-trees.
218
219==== [[/eggref/4/random-access-lists|random-access-lists]]
220
221combine the advantages of linked lists (fast insert and remove) and
222vectors (fast access).
223
224==== [[/eggref/4/simple-tests|simple-tests]]
225
226Some simple macros and commands which help debugging and testing.
227
228==== [[/eggref/4/continuations|continuations]]
229
230Syntactic sugar for Marc Feeley's continuation interface providing i.a.
231catch and throw
232
233==== [[/eggref/4/simple-exceptions|simple-exceptions]]
234
235An easy to use exception wrapper around chicken's condition system.
236
237==== [[/eggref/4/options|options]]
238
239A variant of ML's option datatype, implemented as a functor producing
240typed modules and an untyped module.
241
242==== [[/eggref/4/simple-contracts|simple-contracts]]
243
244Design by contract for procedures
245
246==== [[/eggref/4/yasos|yasos]]
247
248A Chicken port of Kenneth A. Dickey's "Yet another Scheme Object
249System".
250
251=== Obsolete eggs
252
253==== [[/eggref/4/multi-methods|multi-methods]]
254
255Implements a variant of generic functions, where arguments are checked
256against predicates to choose a matching procedure which is eventually
257invoked. A destinctive feature of this implementation is, that the
258client has complete control over the multi-methods state, a search tree,
259and can decide where to insert a procedure to be eventually invoked, so
260that more specific procedures are found before less specific ones.
261Hence, multi-methods can be used to implement OOP. But note, that
262dispatching is done on all arguments, not only the first one, as in
263traditional OOP-implementations.
264Deprecated, use generics instead.
265
266==== [[/eggref/4/cells|cells]]
267
268Simple implementation of the cell datatype, a lightweight variant of
269boxes.
270Deprecated, use simple-cells instead
271
272==== [[/eggref/4/list-bindings|list-bindings]]
273
274Restricting some macros of the bindings egg to nested list expressions
275and supplying define-macro as an application.
276Obsolete, use bindings instead!
277
278==== [[/eggref/4/er-macros|er-macros]]
279
280Explicit renaming macros made easy.
281Obsolete, use bindings instead!
282
283==== [[/eggref/4/ir-macros|ir-macros]]
284
285Implicit renaming macros made even easier.
286Obsolete, use bindings instead!
287
288==== [[/eggref/4/low-level-macros|low-level-macros]]
289
290Low level macros made easy.
291A merger of the two eggs er-macros and ir-macros.
292Obsolete, use bindings instead!
293
294==== [[/eggref/4/dbc|dbc]]
295
296An implementation of "Design by Contract", coined by Bertrand Meyer for his Eiffel language.
297Now obsolete, use simple-contracts instead
298
299==== [[/eggref/4/contracts|contracts]]
300
301My first implementation of "Design by Contract".
302Now obsolete, use dbc instead.
303
304=== Tutorials
305
306==== [[/explicit-renaming-macros|Explicit (and implicit) renaming macros made easy]]
307
308==== [[/iup-tutor|The Iup GUI toolkit]]
309
310==== [[/design-by-contract|Design by Contract]]
311
312==== [[/records-and-oop| Object Orientation and SRFI-99 records]]
Note: See TracBrowser for help on using the repository browser.