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

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

Anonymous wiki edit for IP [220.233.44.123]:

File size: 2.7 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. 
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
25
26=== Example Shen Code 
27
28==== Starting the REPL from a terminal
29
30<enscript highlight="bash">
31$ chicken-shen 
32</enscript>
33
34<enscript highlight="bash">
35Shen, copyright (C) 2010-2015 Mark Tarver
36www.shenlanguage.org, Shen 21.1
37running under Scheme, implementation: Chicken
38port 0.1 ported by David Ireland
39
40(0-) 
41</enscript>
42
43==== Symbols
44
45Unlike Chicken Scheme symbols are implicitly quoted thus no ' is needed. 
46<enscript highlight="lisp">
47(0-) HI
48HI
49</enscript>
50
51==== Basic List processing
52
53<enscript highlight="lisp">
54(define factorial
55        0 -> 1
56        X -> (* X (factorial (- X 1))))
57</enscript>
58
59<enscript highlight="lisp">
60(define total
61        [] -> 0
62        [X | Y] -> (+ X (total Y)))
63</enscript>
64
65
66<enscript highlight="lisp">
67(define triples
68        [] -> []
69        [W X Y | Z] -> [[W X Y] | (triples Z)])
70</enscript>
71
72==== YACC
73<enscript highlight="lisp">
74(defcc <binary?>
75X <binary?> := true where (element? X [0 1]);
76X := true where (element? X [0 1]);
77<e> := false;)
78</enscript>
79
80==== Prolog 
81
82<enscript highlight="lisp">
83(defprolog member
84xxX [X | _] <--;
85xxX [_ | Y] <-- (member X Y);)
86</enscript>
87
88==== Type System
89
90The type system is optional and disabled by default. It can be enabled using: 
91<enscript highlight="lisp"> 
92(0-) (tc +)
93true
94
95(1+) 5
965 : number
97
98(2+) "ABC"
99"ABC" : string
100
101(3+) (+ 1 1)
1022 : number
103</enscript>
104
105and off with:
106
107<enscript highlight="lisp"> 
108(4+) (tc -)
109false : boolean
110
111(5-) 5
1125
113
114(6-) "ABC"
115"ABC"
116
117(7-) (+ 1 1)
1182
119</enscript>
120
121
122==== Calling native Scheme code
123
124Calling native Chicken procedures is done by prefixing 'lisp' to the procedure name. An example of calling Chicken's print is given below. 
125
126<enscript highlight="bash">
127Shen, copyright (C) 2010-2015 Mark Tarver
128www.shenlanguage.org, Shen 21.1
129running under Scheme, implementation: Chicken
130port 0.1 ported by David Ireland
131
132(0-) (lisp.print "Hello World")
133Hello World
134#<unspecified>
135
136(1-)
137</enscript>
138
139
140=== About this egg
141
142==== License
143BSD Clause 3
144
145==== Dependencies
146srfi-1
147srfi-13
148
149==== Versions
150; [[https:sarnath.xyz/chicken-shen/tarball/chicken-shen-0.1.tar.gz|0.1]] : 
151
Note: See TracBrowser for help on using the repository browser.