lisp 1.4.0 → 1.4.2

Sign up to get free protection for your applications and to get access to all the features.
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