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

Last change on this file since 37961 was 37961, checked in by juergen, 8 months ago

juergen-lorenz updated

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