lisp 1.4.0 → 1.4.2

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: 8415c51f19fcf2d2407b4e648726362aed1ff518
4
- data.tar.gz: d7fa8e0de34061c8dcdb030a50b382fd77a9d627
3
+ metadata.gz: 38d7b0804909b38cc12ccd8c10ee47e5386d7e2d
4
+ data.tar.gz: f7aca5e50f7d1c9959e6e8994c63de59f86d3c11
5
5
  SHA512:
6
- metadata.gz: 3c38eaf6967bc43c5ab122095664cd41ae9a2f36dde51207f4c926592c4ff7431a033942ad8cf0c695385f59e011f6f68571141ee77ed2e0774e967c4154e905
7
- data.tar.gz: 14f4a2af0e2b7413301f6b86ee1d3ce0228f1806244ac98cccf5c6179bbbac28dd33e6a21a6e17cec7a2015dc6a8f255c8f8ec028599b328522f51c9ca360f2a
6
+ metadata.gz: 3746975bc6337ab8dac411fa08e04295031c3e29a869aee9b3dcc3928f76eb750964a049d991401ec16ebd97ecf6f8f099ded84f9845396bfdd25dcc84e609bd
7
+ data.tar.gz: 7004c064a67d1713ea8780ff153ff5864ae18281439f5c0f796507b7dda3357023583038d54795987b8b39123f2779434818c5f8618c3aa17029e9feb2145a35
data/.travis ADDED
@@ -0,0 +1,8 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.0.0
5
+ before_install: gem install bundler -v 1.12.5
6
+ addons:
7
+ code_climate:
8
+ repo_token: 0a4c13b71635c00cee43aba776853ade9404cc745c42977e25a5877a3e148527
data/.travis.yml ADDED
@@ -0,0 +1,10 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.0.0
5
+ before_install: gem install bundler -v 1.12.5
6
+ addons:
7
+ code_climate:
8
+ repo_token: 0a4c13b71635c00cee43aba776853ade9404cc745c42977e25a5877a3e148527
9
+ after_success:
10
+ - bundle exec codeclimate-test-reporter
data/Gemfile CHANGED
@@ -2,7 +2,7 @@ source "https://rubygems.org"
2
2
 
3
3
  group :test do
4
4
  gem "simplecov"
5
- gem "codeclimate-test-reporter", require: nil
5
+ gem "codeclimate-test-reporter", "~> 1.0.0"
6
6
  end
7
7
 
8
8
  gemspec
data/README.md CHANGED
@@ -1,25 +1,21 @@
1
1
  lisp
2
2
  ====
3
3
 
4
- [![Code Climate](https://codeclimate.com/github/jamesmoriarty/lisp-rb/badges/gpa.svg)](https://codeclimate.com/github/jamesmoriarty/lisp-rb) [![Test Coverage](https://codeclimate.com/github/jamesmoriarty/lisp-rb/badges/coverage.svg)](https://codeclimate.com/github/jamesmoriarty/lisp-rb/coverage)
4
+ [![Code Climate](https://codeclimate.com/github/jamesmoriarty/lisp-rb/badges/gpa.svg)](https://codeclimate.com/github/jamesmoriarty/lisp-rb) [![Test Coverage](https://codeclimate.com/github/jamesmoriarty/lisp-rb/badges/coverage.svg)](https://codeclimate.com/github/jamesmoriarty/lisp-rb/coverage) [![Build Status](https://travis-ci.org/jamesmoriarty/lisp.svg?branch=master)](https://travis-ci.org/jamesmoriarty/lisp)
5
5
 
6
6
  Lisp Interpreter in the Ruby Programming Language - 70 LOC. Inspired by [Lis.py](http://norvig.com/lispy.html).
7
7
 
8
8
  ```
9
- $ lisp-rb
9
+ $ lisp-repl
10
10
  ctrl-c to exit
11
- > (define pi 3.14)
12
- 3.14
13
- > (* pi 2)
14
- 6.28
15
- > (define area (lambda (r) (* 3.141592653 (* r r))))
16
- #<Proc:0x007f8af9c59ff0@./lisp.rb:44>
17
- > (area 3)
18
- 28.274333877
19
- > (define fact (lambda (n) (if (<= n 1) 1 (* n (fact (- n 1))))))
20
- #<Proc:0x007f9a4cc4acf0@./lisp.rb:63 (lambda)>
21
- > (fact 10)
22
- 3628800.0
11
+ > (begin
12
+ (> (define incf
13
+ ((> (lambda (x)
14
+ (((> (set! x (+ x 1))))
15
+ (> (define one 1)
16
+ (> (incf one))
17
+ 2
18
+ >
23
19
  ```
24
20
 
25
21
  Install
File without changes
data/lib/lisp.rb CHANGED
@@ -39,8 +39,8 @@ module Lisp
39
39
  end
40
40
 
41
41
  def self.execute expression, scope = global
42
- return scope[expression] if expression.is_a? Symbol
43
- return expression unless expression.is_a? Array
42
+ return scope.fetch(expression) { |var| raise "#{var} is undefined" } if expression.is_a? Symbol
43
+ return expression unless expression.is_a? Array
44
44
 
45
45
  case expression[0]
46
46
  when :define
@@ -58,7 +58,7 @@ module Lisp
58
58
  if scope.has_key?(var) then scope[var] = execute expression, scope else raise "#{var} is undefined" end
59
59
  when :begin
60
60
  _, *expression = expression
61
- expression.map { |expression| execute expression }.last
61
+ expression.map { |expression| execute expression, scope }.last
62
62
  else
63
63
  function, *args = expression.map { |expression| execute expression, scope }
64
64
  function.call *args
@@ -0,0 +1,9 @@
1
+ class Proc
2
+ def to_s
3
+ "(lambda (...) (...))"
4
+ end
5
+
6
+ def inspect
7
+ to_s
8
+ end
9
+ end
data/lib/lisp/repl.rb CHANGED
@@ -1,7 +1,10 @@
1
1
  #!/usr/bin/env ruby
2
+
2
3
  require "coolline"
3
4
  require "coderay"
4
5
 
6
+ require "lisp/ext/proc"
7
+
5
8
  module Lisp
6
9
  class REPL
7
10
  attr_reader :io, :input
data/lib/lisp/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Lisp
2
- VERSION = "1.4.0"
2
+ VERSION = '1.4.2'.freeze
3
3
  end
data/lisp.gemspec CHANGED
@@ -22,4 +22,5 @@ Gem::Specification.new do |spec|
22
22
  spec.add_dependency "coderay"
23
23
  spec.add_development_dependency "bundler", "~> 1.6"
24
24
  spec.add_development_dependency "rake"
25
+ spec.add_development_dependency "minitest", "> 5"
25
26
  end
data/test/test_lisp.rb CHANGED
@@ -72,6 +72,15 @@ class TestLisp < MiniTest::Unit::TestCase
72
72
  eos
73
73
  end
74
74
 
75
+ def test_lambda_no_args
76
+ assert_equal 42, Lisp.eval(<<-eos)
77
+ (begin
78
+ (define test
79
+ (lambda () 42))
80
+ (test))
81
+ eos
82
+ end
83
+
75
84
  def test_lambda_call_self
76
85
  assert_equal 3628800, Lisp.eval(<<-eos)
77
86
  (begin
@@ -93,6 +102,21 @@ class TestLisp < MiniTest::Unit::TestCase
93
102
  eos
94
103
  end
95
104
 
105
+ def test_nested_begin
106
+ assert_raises(RuntimeError, "one is undefined") do
107
+ Lisp.eval(<<-eos)
108
+ (begin
109
+ (define test
110
+ (lambda ()
111
+ (begin
112
+ (define one 1)
113
+ (+ one 1))))
114
+ (test)
115
+ (+ 2 one))
116
+ eos
117
+ end
118
+ end
119
+
96
120
  def test_program
97
121
  assert_equal 2, Lisp.eval(<<-eos)
98
122
  (begin
@@ -112,7 +136,7 @@ class TestLisp < MiniTest::Unit::TestCase
112
136
  Process.kill("INT", pid)
113
137
  thread.join
114
138
  end
115
-
139
+
116
140
  assert_output("ctrl-c to exit\n") do
117
141
  subject.run
118
142
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lisp
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - James Moriarty
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-09-24 00:00:00.000000000 Z
11
+ date: 2017-02-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: coolline
@@ -66,25 +66,41 @@ dependencies:
66
66
  - - '>='
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: minitest
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>'
74
+ - !ruby/object:Gem::Version
75
+ version: '5'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>'
81
+ - !ruby/object:Gem::Version
82
+ version: '5'
69
83
  description: ''
70
84
  email:
71
85
  - jamespaulmoriarty@gmail.com
72
86
  executables:
73
- - lisp-rb
87
+ - lisp-repl
74
88
  extensions: []
75
89
  extra_rdoc_files: []
76
90
  files:
77
91
  - .gitignore
92
+ - .travis
93
+ - .travis.yml
78
94
  - Gemfile
79
95
  - LICENSE.txt
80
96
  - README.md
81
97
  - Rakefile
82
- - bin/lisp-rb
98
+ - bin/lisp-repl
83
99
  - lib/lisp.rb
100
+ - lib/lisp/ext/proc.rb
84
101
  - lib/lisp/repl.rb
85
102
  - lib/lisp/version.rb
86
103
  - lisp.gemspec
87
- - test/support/codeclimate.rb
88
104
  - test/support/simplecov.rb
89
105
  - test/test_lisp.rb
90
106
  homepage: ''
@@ -112,6 +128,5 @@ signing_key:
112
128
  specification_version: 4
113
129
  summary: Lisp Interpreter in Ruby.
114
130
  test_files:
115
- - test/support/codeclimate.rb
116
131
  - test/support/simplecov.rb
117
132
  - test/test_lisp.rb
@@ -1,2 +0,0 @@
1
- require "codeclimate-test-reporter"
2
- CodeClimate::TestReporter.start