lasp 0.11.0 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 239d33a36efb77e46301fa1f4f5eab3355d95371
4
- data.tar.gz: 2b63d5918420dd74b0e4e73e9b799eed3ab33113
3
+ metadata.gz: f37487e5e7f6bd7fb1ef31fef1dfa3bcfb4c9f55
4
+ data.tar.gz: b0bbd30928d655e45bcc809af6a34bfb389e0fcd
5
5
  SHA512:
6
- metadata.gz: 74d78665c4fa130cb7a583c4cce512bdce06db31086f4ad889a0ef0015d60b3a84892e530236f7f21937f4663e5e6e1c5f6383f5d9af6baa6871974524074d97
7
- data.tar.gz: 1a7daa286ff20db4c8b3008525c1b10edff6c61a4848f5bb2c04b97ad58cef832bfb72961765c422a761cdae26371c297e1a47d6fc1d307e2e2c943add69e1ea
6
+ metadata.gz: 8d05c4d229e16ece6639a639b1555a5f76159b2ca29fe11890b181dcf4332f08164e26b0e1ac6f1da01af61a63e3c568efdd48b4eb11a996200d7679b53a7dd1
7
+ data.tar.gz: 60734cb7b52b5c3a1ef00e3a80dbb201c31c496b8580e1675131154580a6e0d1cf9edf160feaa5c15e933e8fb1eb279c3e209d5880cd11db8dad032baa7d1811
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Läsp changelog
2
2
 
3
+ ## v0.12.0 - 2016-03-18
4
+
5
+ ### Added
6
+
7
+ - Allow access to Ruby constants, namespaces separated by `/`.
8
+
9
+
3
10
  ## v0.11.0 - 2016-03-05
4
11
 
5
12
  ### Added
data/README.md CHANGED
@@ -4,14 +4,14 @@ A Lisp implementation in Ruby.
4
4
 
5
5
  ## Features
6
6
 
7
- - Comprehensive [documentation](DOCUMENTATION.md)
7
+ - Comprehensive [documentation](#documentation)
8
8
  - Interactive REPL with auto-closing of missing trailing parentheses
9
9
  - Closures
10
10
  - let-bindings
11
11
  - Fully functional macro system
12
12
  - Interoperability with Ruby
13
13
  - Very concise [core library](lib/lasp/corelib.rb) written in Ruby
14
- - [Standard library](lib/lasp/stdlib.lisp) written in Läsp itself
14
+ - [Standard library](lib/lasp/stdlib.lasp) written in Läsp itself
15
15
 
16
16
  ## Installation
17
17
 
@@ -40,38 +40,13 @@ lasp
40
40
  lasp path/to/program.lasp
41
41
  ```
42
42
 
43
- ## The language
43
+ ## Documentation
44
44
 
45
- Please reference the [documentation](DOCUMENTATION.md) for specific definitions
46
- and examples of all available functions.
45
+ - [Language](docs/language.md) - explains the core types and syntax of the language.
46
+ - [Reference](docs/reference.md) - a list of every available function with description and usage examples.
47
+ - [Examples](docs/examples.md) - various small examples of using the language.
48
+ - [Zuul](https://github.com/alcesleo/zuul) - a small text-based game written in Läsp.
47
49
 
48
- ### Examples
49
-
50
- More advanced examples can be found in [EXAMPLES.md](EXAMPLES.md), you can also
51
- look at the [standard library](lib/lasp/stdlib.lasp) which is implemented in
52
- Läsp itself.
53
-
54
- ```lisp
55
- (+ 1 2 3) ;; => 6
56
-
57
- (def x 5)
58
- x ;; => 6
59
-
60
- (sum (list 5 10 15)) ;; => 30
61
-
62
- (def inc (fn (x) (+ x 1)))
63
- (inc 5) ;; => 6
64
- ```
65
-
66
-
67
- ### Comments
68
-
69
- Comments start with a `;` and end at the end of a line
70
-
71
- ```lisp
72
- ; This is a comment
73
- (+ 1 2) ; This is also a comment
74
- ```
75
50
 
76
51
  ## Developing
77
52
 
@@ -248,10 +248,11 @@ x ;; => (1 2 3)
248
248
  ## Interoperability
249
249
 
250
250
  ```clojure
251
- ; The . function allows for Ruby interoperability.
252
- (. "01011101" :to_i 2) ;; => 93
251
+ ; Prepend a dot to the method name and pass the object as the first argument to
252
+ ; call a Ruby method.
253
+ (.to_i "01011101" 2) ;; => 93
253
254
 
254
- (def parse_binary (fn (bin) (. bin :to_i 2)))
255
+ (def parse_binary (fn (bin) (.to_i bin 2)))
255
256
  (parse_binary "01011101") ;; => 93
256
257
  ```
257
258
 
data/docs/language.md ADDED
@@ -0,0 +1,136 @@
1
+ # Language
2
+
3
+ This page describes the syntax and core types of the language.
4
+
5
+ ## Comments
6
+
7
+ Comments start with a `;` and end at the end of a line
8
+
9
+ ```lisp
10
+ ; This is a comment
11
+ (+ 1 2) ; This is also a comment
12
+ ```
13
+
14
+
15
+ ## Data types
16
+
17
+ The core types are backed by their corresponding Ruby classes. This can be seen
18
+ by doing `(.class 5)`.
19
+
20
+ ### integer
21
+
22
+ A whole number.
23
+
24
+ ```clojure
25
+ 1
26
+ -42
27
+ 0
28
+ ```
29
+
30
+ ### decimal
31
+
32
+ A decimal number.
33
+
34
+ ```clojure
35
+ 3.56
36
+ -0.5
37
+ ```
38
+
39
+ ### boolean
40
+
41
+ The value `true` or `false`.
42
+
43
+ ```clojure
44
+ true
45
+ false
46
+ ```
47
+
48
+ ### nil
49
+
50
+ The "null" or "no value" type.
51
+
52
+ ```clojure
53
+ nil
54
+ ```
55
+
56
+ ### text
57
+
58
+ Text of any length. There is a shorthand syntax that can be used when the
59
+ string does not contain any whitespace - this makes the syntax in `dict`s
60
+ nicer, for example.
61
+
62
+ It supports these escape characters:
63
+
64
+ - `\n` - a newline
65
+ - `\t` - a tab
66
+ - `\\` - a literal `\`
67
+ - `\"` - a literal `"`
68
+
69
+ ```clojure
70
+ "some text" ; => "some text"
71
+
72
+ ; Shorthand version
73
+ :text ; => "text"
74
+
75
+ ; Using escape characters
76
+ ;
77
+ ; Note that they will still look escaped when returned in the REPL,
78
+ ; however, if you print them you will get the literal text.
79
+ "text with \" and \\ in it" ; => "text with \" and \\ in it"
80
+
81
+ (println "text with \" and \\ in it")
82
+ ; text with " and \ in it
83
+ ```
84
+
85
+ ### list
86
+
87
+ A heterogeneous (allows mixed types) list of values, can be created with the
88
+ [list](reference.md#list) function. This type is also used to call a
89
+ function. There is no difference between a list of data and a "list of code",
90
+ a.k.a. **form**.
91
+
92
+ ```clojure
93
+ (list 1 2 :three) ; => (1 2 "three")
94
+
95
+ ; The first item in the list will be called with the rest of the list as arguments:
96
+ (println "Hello, " "world!")
97
+ ```
98
+
99
+ ### dict
100
+
101
+ A dictionary (a.k.a. hash-map) of keys that map to values, can be created with
102
+ the [dict](reference.md#dict) function.
103
+
104
+ ```clojure
105
+ ; Here we use the shorthand text syntax as keys
106
+ (dict :one 1 :two 2) ; => {"one" 1, "two" 2}
107
+ ```
108
+
109
+ ### symbol
110
+
111
+ Used to name other things (see [def](reference.md#def)), but can be obtained in itself by
112
+ quoting (see [quote](reference.md#quote)).
113
+
114
+ Symbols should be lowercase, with words separated by dashes.
115
+
116
+ ```clojure
117
+ ; A symbol will resolve to what it has been defined as
118
+ symbol
119
+
120
+ ; To obtain a symbol by itself, you have to quote it
121
+ 'symbol
122
+
123
+ 'a-long-symbol-name
124
+ ```
125
+
126
+ ## Ruby interoperability
127
+
128
+ You can access Ruby classes and modules, to access nested ones use `/`. To call
129
+ Ruby methods, simply prepend a dot to the method name, and pass the object as
130
+ the first parameter.
131
+
132
+ ```clojure
133
+ (.ceil Math/PI) ; => 4
134
+
135
+ (.to_i "010101" 2) ; => 21
136
+ ```
@@ -1,18 +1,7 @@
1
- # Documentation
2
-
3
- ## Data types
4
-
5
- | Data type | Example literals | Description |
6
- | :--- | :--- | :--- |
7
- | integer | `1`, `-42`, `0` | A whole number of any size |
8
- | decimal | `3.56`, `-0.5` | A decimal number of any size |
9
- | boolean | `true`, `false` | The value `true` or `false` |
10
- | nil | `nil` | The "null" or "no value" type |
11
- | text | `"some text"`, `:text` | Text of any length. When containing no whitespace, it can be written with a leading colon (handy in dicts) |
12
- | list | `(list 1 2 3.5)` | A heterogeneous (allows mixed types) list of values, can be created with the [list](#list) function |
13
- | dict | `(dict :one 1 :two 2)` | A dictionary (a.k.a. hash-map) of keys that map to values, can be created with the [dict](#dict) function |
14
- | symbol | `symbol`, `'symbol` | Used to name other things (see [def](#def)), but can be obtained in itself by quoting (see [quote](#quote)) |
1
+ # Reference
15
2
 
3
+ This is a reference of all the functions you can call by default in any Läsp
4
+ program.
16
5
 
17
6
  ## Special forms
18
7
 
@@ -35,7 +35,11 @@ module Lasp
35
35
  end
36
36
 
37
37
  def resolve_symbol(symbol, env)
38
- env.fetch(symbol)
38
+ if symbol.to_s.match(/^[A-Z]/)
39
+ Object.const_get(symbol.to_s.gsub("/", "::"))
40
+ else
41
+ env.fetch(symbol)
42
+ end
39
43
  rescue KeyError
40
44
  raise NameError, "#{symbol} is not present in this context"
41
45
  end
data/lib/lasp/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Lasp
2
- VERSION = "0.11.0"
2
+ VERSION = "0.12.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lasp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.0
4
+ version: 0.12.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jimmy Börjesson
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-05 00:00:00.000000000 Z
11
+ date: 2016-03-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -63,13 +63,14 @@ files:
63
63
  - ".gitignore"
64
64
  - ".travis.yml"
65
65
  - CHANGELOG.md
66
- - DOCUMENTATION.md
67
- - EXAMPLES.md
68
66
  - Gemfile
69
67
  - LICENSE.txt
70
68
  - README.md
71
69
  - Rakefile
72
70
  - bin/lasp
71
+ - docs/examples.md
72
+ - docs/language.md
73
+ - docs/reference.md
73
74
  - lasp.gemspec
74
75
  - lib/lasp.rb
75
76
  - lib/lasp/corelib.rb