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

Last change on this file since 37175 was 37175, checked in by svnwiki, 10 months ago

Anonymous wiki edit for IP [220.233.44.123]:

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