source: project/wiki/eggref/5/shen @ 37170

Last change on this file since 37170 was 37170, checked in by svnwiki, 8 months ago

Anonymous wiki edit for IP [45.248.77.253]:

File size: 4.2 KB
Line 
1== shen
2
3A port of the Shen programming language for Chicken Scheme. 
4
5[[toc:]]
6
7=== Shen 
8
9Shen is a hosted language that comes with a macro system, prolog, optional type system based on sequent calculus and a YACC. This egg comes with a standalone binary chicken-shen that provides a REPL and a shen library to embedded inside Scheme. 
10
11=== Egg Author
12
13David Ireland (djireland79 at gmail dot com)
14
15=== Shen Documentation 
16
17The best source of information for Shen programming is the
18[[https://www.amazon.com/Book-Shen-third-Mark-Tarver/dp/1784562130/ref=sr_1_1?ie=UTF8&qid=1548832486&sr=8-1&keywords=the+book+of+shen| The Book of Shen]] and the [[http://www.shenlanguage.org/|Shen web site]]
19. 
20=== Egg Source Code
21
22[[https://sarnath.xyz/chicken-shen |Chicken-Shen]]
23
24=== Chicken Shen Usage 
25
26Usage for the standalone binary for running a REPL or loading a file or string is here:
27 
28<enscript highlight="bash">
29$ chicken-shen -h
30
31Usage: shen [options] [...args...]
32  -h, --help          : Prints help and exits
33  -l, --load <file>   : Loads Shen <file>
34  -e, --eval <string> : Evaluates <string>
35  -r, --repl          : Run the REPL, even if -l or -e are provided
36Any additional arguments are passed to the Shen system in
37the variable shen-wasp.*argv*
38</enscript>
39
40=== Calling Shen from Scheme
41
42Runs the REPL inside Chicken Scheme
43
44<procedure> (run-shen) </procedure>
45
46Reads and loads a shen file 
47
48<procedure> (read-file FILE) </procedure>
49
50Reads and loads a string containing Shen code.
51
52<procedure> (read-from-string STRING) </procedure>
53
54<enscript highlight="lisp">
55 (import (prefix shen shen:))
56 
57 ;;; Load file example
58 (shen:read-file "foo.shen")
59
60 ;;; Evaluate string
61 (shen:read-from-string "(define foo 0 -> 1 1 -> 0)")
62 (shen:read-from-string "(foo 0)") ;;; Should return 1
63 
64</enscript>
65
66==== Starting the REPL from a terminal
67
68<enscript highlight="bash">
69$ chicken-shen 
70</enscript>
71
72<enscript highlight="bash">
73Shen, copyright (C) 2010-2015 Mark Tarver
74www.shenlanguage.org, Shen 21.1
75running under Scheme, implementation: Chicken
76port 0.1 ported by David Ireland
77
78(0-) 
79</enscript>
80
81=== Example Shen Code 
82
83==== Symbols
84
85Unlike Chicken Scheme symbols are implicitly quoted thus no ' is needed. 
86<enscript highlight="lisp">
87(0-) HI
88HI
89</enscript>
90
91==== Basic List processing
92
93Lists in Shen are enclosed with [ ] for example:
94
95<enscript highlight="lisp">
96(12-) [1 2 3]
97(13-) (head [1 2 3])
981
99(14-) (cons 1 [])
100[1]
101(15-) [1 2 | [3]]
102[1 2 3]
103</enscript>
104
105==== Procedures
106
107Procedures are defined using a pattern matching. For example: 
108<enscript highlight="lisp">
109(define factorial
110        0 -> 1
111        X -> (* X (factorial (- X 1))))
112</enscript>
113
114<enscript highlight="lisp">
115(define total
116        [] -> 0
117        [X | Y] -> (+ X (total Y)))
118</enscript>
119
120
121<enscript highlight="lisp">
122(define triples
123        [] -> []
124        [W X Y | Z] -> [[W X Y] | (triples Z)])
125</enscript>
126
127==== YACC
128Shen has an internal YACC (yet another compiler compiler)
129
130<enscript highlight="lisp">
131(defcc <binary?>
132X <binary?> := true where (element? X [0 1]);
133X := true where (element? X [0 1]);
134<e> := false;)
135</enscript>
136
137==== Prolog 
138
139Shen also has an emebedded prolog for logic programming
140
141<enscript highlight="lisp">
142(defprolog member
143xxX [X | _] <--;
144xxX [_ | Y] <-- (member X Y);)
145</enscript>
146
147==== Type System
148
149The type system is optional and disabled by default. It can be enabled using: 
150<enscript highlight="lisp"> 
151(0-) (tc +)
152true
153
154(1+) 5
1555 : number
156
157(2+) "ABC"
158"ABC" : string
159
160(3+) (+ 1 1)
1612 : number
162</enscript>
163
164and off with:
165
166<enscript highlight="lisp"> 
167(4+) (tc -)
168false : boolean
169
170(5-) 5
1715
172
173(6-) "ABC"
174"ABC"
175
176(7-) (+ 1 1)
1772
178</enscript>
179
180
181==== Calling native Scheme code
182
183Calling native Chicken procedures is done by prefixing 'lisp' to the procedure name. An example of calling Chicken's print is given below. 
184
185<enscript highlight="bash">
186Shen, copyright (C) 2010-2015 Mark Tarver
187www.shenlanguage.org, Shen 21.1
188running under Scheme, implementation: Chicken
189port 0.1 ported by David Ireland
190
191(0-) (lisp.print "Hello World")
192Hello World
193#<unspecified>
194
195(1-)
196</enscript>
197
198
199=== About this egg
200
201==== License
202BSD Clause 3
203
204==== Dependencies
205srfi-1
206srfi-13
207
208==== Versions
209; [[https:sarnath.xyz/chicken-shen/tarball/chicken-shen-0.1.tar.gz|0.1]] : 
210
Note: See TracBrowser for help on using the repository browser.