Skip to content
This repository was archived by the owner on Oct 14, 2025. It is now read-only.
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# Lucio (en)
# Lucio (en) <img src="https://secure.travis-ci.org/pbalduino/lucio.png?branch=master">

## What?
Lucio is **intended to be** a Lisp-like language developed in Ruby only for knowledge and fun. No profit intended.
Expand Down Expand Up @@ -89,3 +89,5 @@ A lista de colaboradores está no final desse arquivo e, espero que continue cre
* Bruno Jessen

* Santiago Nunes

Douglas Campos (/qmx) [@qmx](http://twitter.com/qmx)
2 changes: 1 addition & 1 deletion lib/lucio/lucio.rb
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ def initialize(lexicon = LexiconStack.new)
@lexicon.add_macro :define , lambda{|lexicon, items| define lexicon, items }
@lexicon.add_macro :if , lambda{|lexicon, items| Evaluator.evaluate_tree(items[0], lexicon) ? Evaluator.evaluate_tree(items[1], lexicon) : (Evaluator.evaluate_tree(items[2], lexicon) if items[2]) }
@lexicon.add_macro :fun , lambda{|lexicon, items| lexicon.add_function items.to_sym, Function.new(items, lexicon) }
@lexicon.add_macro :defmacro , lambda{|lexicon, items| h, t = Lucio.behead(items); lexicon.add_macro h, Macro.new(t, lexicon) }
@lexicon.add_macro :defmacro , lambda{|lexicon, items| h, t = Lucio.behead(items); lexicon.add_macro h, Macro.new(t) }
@lexicon.add_macro :send , lambda{|lexicon, items| items[1].send(items[0], items[2]) }

# eval('(include "lib/core")')
Expand Down
20 changes: 6 additions & 14 deletions lib/lucio/macro.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
class Macro
def initialize(declaration, lexicon)
def initialize(declaration)
@signatures = {}

declaration.each do |signature|
Expand All @@ -20,32 +20,24 @@ def initialize(declaration, lexicon)
end
end

def call(global_lexicon, list)
def call(lexicon, list)
signature = @signatures[list.size]
parameters = signature[:parameters]
code = Array.new(signature[:code][0])

result = replace(list, parameters, Array.new(signature[:code][0]))
replaced = replace(list, parameters, code)

p 'call', result

result
Evaluator.evaluate_tree replaced, lexicon

end

def replace(list, parameters, result)
puts ''
p 'b4', result
list.size.times do |item|
result.map! do |part|
if part.is_array?
part = replace(list, parameters, part)
else
part == parameters[item] ? list[item] : part
end
part = part == parameters[item] ? list[item] : part
end
end

p 'aftr', result
result
end
end
Binary file added misc/lucio.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
110 changes: 110 additions & 0 deletions misc/lucio.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
8 changes: 4 additions & 4 deletions spec/macro_spec.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
before :each do
@lucio = Lucio.new
end
=begin

it 'simple if implementation' do
macro = '
(defmacro my-if
Expand All @@ -21,7 +21,7 @@
(my-if (eql? 1 2)
(true)
(false))'

@lucio.eval(macro + code_true).should be_true

@lucio.eval(macro + code_false).should be_false
Expand All @@ -46,7 +46,7 @@
it 'simple if implementation with variable = false' do
code = <<-LISP
(defmacro my-if
([test? x truey x falsey x]
([test? then truey else falsey end]
`(display test?)(if test? truey falsey)))

(define x false)
Expand All @@ -64,7 +64,7 @@
@lucio.eval(code).should be_false

end
=end

end

end