pyper 1.0.0 → 1.0.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/pyper/version.rb +2 -1
- data/lib/pyper.rb +26 -17
- data/test/pyper_test.rb +15 -2
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: ae702106bdc8ca11192dccacd049c668d5fd7309
|
4
|
+
data.tar.gz: 2a73f2e591932e5f58894200553f48bfb3b53901
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: fe04b4c64f4f53e6431da543938e8f8c6a7cbfe8a4751589a0352a94a9a30d5eeeac702e073ab670458022cef72831ba95217375a3850938a67c433889a7e745
|
7
|
+
data.tar.gz: 8ca38172287630003f181528d898bb4d2583132ad67f76ff8e80530ff139c99d11d7e1cb03e60b52b66128dcd271d2f96d196a6583b2ea44726f221fbb571d4e
|
data/lib/pyper/version.rb
CHANGED
data/lib/pyper.rb
CHANGED
@@ -5,7 +5,6 @@ require "pyper/version"
|
|
5
5
|
# Pyper is an extension of the Lispy car/cdr idea.
|
6
6
|
#
|
7
7
|
module Pyper
|
8
|
-
|
9
8
|
# Everybody knows Lispy functions #car, #cdr. In Ruby, these functions
|
10
9
|
# can be defined for example as:
|
11
10
|
def car; first end # a: first
|
@@ -117,11 +116,11 @@ module Pyper
|
|
117
116
|
mτ_string.gsub! /^alpha\nalpha\n/, "alpha\n" # workaround
|
118
117
|
mτ_string.gsub! /^alpha\nalpha =/, "alpha =" # workaround
|
119
118
|
mτ_string.gsub! /^alpha = alpha =/, 'alpha =' # workaround
|
120
|
-
|
119
|
+
puts mτ_string if Pyper::DEBUG
|
121
120
|
self.class.module_eval( mτ_string )
|
122
121
|
send( mτ_sym, *args, &block )
|
123
122
|
}
|
124
|
-
|
123
|
+
puts "received msg #{mτ_sym}" if Pyper::DEBUG
|
125
124
|
case mτ_sym.to_s
|
126
125
|
when /^τ(.+)τ$/ then pyperλ.( op: 1, ret: 1 )
|
127
126
|
when /^π(.+)τ$/ then pyperλ.( op: 2, ret: 1 )
|
@@ -827,39 +826,39 @@ module Pyper
|
|
827
826
|
#
|
828
827
|
# Greek characters corresponding to the internal variable names of the
|
829
828
|
# Pyper method are used to manipulate the argument source stack:
|
830
|
-
|
829
|
+
|
831
830
|
# α pushes the primary pipeline (0) on the @argsrc stack:
|
832
831
|
def α; @argsrc.alpha end
|
833
832
|
# (Remark: Current pipe name is at the bottom of the @rr pipe stack)
|
834
|
-
|
833
|
+
|
835
834
|
# β pushes the secondary pipeline (1) on the @argsrc stack:
|
836
835
|
def β; @argsrc.beta end
|
837
836
|
# (Remark: SUCC hash tells us what the other pipe is, based on the
|
838
837
|
# current pipe name, seen on the *bottom* of the pipe stack @rr)
|
839
|
-
|
838
|
+
|
840
839
|
# γ refers to the successor pipe (SUCC[@rr[0]]), but as there are only
|
841
840
|
# two pipes, it is always the other pipe.
|
842
841
|
def γ; @argsrc.var rSUCC( @rr[0] ) end
|
843
|
-
|
842
|
+
|
844
843
|
# δ pushes the in-block pipeline delta on the @argsrc stack:
|
845
844
|
def δ; @argsrc.delta end
|
846
|
-
|
845
|
+
|
847
846
|
# ε, ζ push block arguments epsilon, resp. zeta on the @argsrc stack:
|
848
847
|
def ε; @argsrc.epsilon end
|
849
848
|
def ζ; @argsrc.zeta end
|
850
|
-
|
849
|
+
|
851
850
|
# ψ and ω respectively refer to the penultimate and last args element:
|
852
851
|
def ψ; @argsrc.psi end
|
853
852
|
def ω; @argsrc.omega end
|
854
|
-
|
853
|
+
|
855
854
|
# Lambda pushes onto the argument stack the default argument source, which
|
856
855
|
# is the argument list indexed with write-time @arg_count index:
|
857
856
|
def λ; @argsrc.args_counted end
|
858
|
-
|
857
|
+
|
859
858
|
# Capital omega pushes onto the argument stack whole 'args' variable
|
860
859
|
# (whole argument list), with 'shift' mode turned on by default:
|
861
860
|
def Ω; @argsrc.args end
|
862
|
-
|
861
|
+
|
863
862
|
# When inverted exclamation mark '¡' is used a prefix to the source
|
864
863
|
# selector, then rather then being pushed on the @argsrc stack, the new
|
865
864
|
# argument source replaces the topmost element of the stack. When the
|
@@ -876,20 +875,20 @@ module Pyper
|
|
876
875
|
def ¡ω; @argsrc.omega! end
|
877
876
|
def ¡λ; @argsrc.args_counted! end
|
878
877
|
def ¡Ω; @argsrc.args! end
|
879
|
-
|
878
|
+
|
880
879
|
# Small pi sets the 'dup' grab mode for the top @argsrc element:
|
881
|
-
def π; @argsrc.
|
880
|
+
def π; @argsrc.dup! end
|
882
881
|
|
883
882
|
# Small sigma sets the 'shift' grab mode for the top @argsrc element:
|
884
883
|
def σ; @argsrc.shift! end
|
885
|
-
|
884
|
+
|
886
885
|
# Small pi prefixed with inverted exclamation mark sets the 'ref'
|
887
886
|
# (default) grab mode for the top@argsrc element (naturally, turning off
|
888
887
|
# 'shift' or 'dup' mode).
|
889
888
|
def ¡π; @argsrc.ref! end
|
890
889
|
# Same for small sigma prefixed with inverted exclamation mark:
|
891
890
|
alias :¡σ :¡π
|
892
|
-
|
891
|
+
|
893
892
|
# Iota decrements the @arg_count index. If iota is used once, it causes
|
894
893
|
# that same argument is used twice. If iota is used repeatedly, pointer
|
895
894
|
# goes further back in the arg. ᴀ.
|
@@ -907,7 +906,16 @@ module Pyper
|
|
907
906
|
def j; chain "join" end # nullary join
|
908
907
|
# k:
|
909
908
|
# l:
|
910
|
-
def m; nullary_m_with_block "map" end # All-important #map method
|
909
|
+
# def m; nullary_m_with_block "map" end # All-important #map method
|
910
|
+
|
911
|
+
# '9' - [-1st] (ie. an array with only the last collection element)
|
912
|
+
def m
|
913
|
+
pipe_2_variable
|
914
|
+
start "if #@r.is_a? String then #@r = #@r.each_char end\n"
|
915
|
+
start
|
916
|
+
nullary_m_with_block "map"
|
917
|
+
end
|
918
|
+
|
911
919
|
# n:
|
912
920
|
# o: prefix character
|
913
921
|
# p: ? recursive piper method, begin
|
@@ -919,6 +927,7 @@ module Pyper
|
|
919
927
|
# Latin capital letters
|
920
928
|
# ********************************************************************
|
921
929
|
def A; pipe_2_variable; start "Array(#@r)" end # Array( pipe )
|
930
|
+
alias Α A # Greek Α, looks the same, different char
|
922
931
|
def B; @take_block = true unless @take_block == :taken end # eat block
|
923
932
|
def C; paren end # explicit parenthesize
|
924
933
|
def D; exe "#@r = #@r.dup" end # self.dup
|
data/test/pyper_test.rb
CHANGED
@@ -3,8 +3,8 @@
|
|
3
3
|
|
4
4
|
require 'test/unit'
|
5
5
|
require 'shoulda'
|
6
|
-
|
7
|
-
require 'pyper'
|
6
|
+
require_relative './../lib/pyper'
|
7
|
+
# require 'pyper'
|
8
8
|
|
9
9
|
include Pyper
|
10
10
|
|
@@ -105,5 +105,18 @@ class YPiperTest < ::Test::Unit::TestCase
|
|
105
105
|
assert_equal ['x'], ['x'].τmß_mςτ
|
106
106
|
assert_equal [[['y']]], [[[:y]]].τmmmςτ
|
107
107
|
assert_equal [[:x, :y], [:v, :w]], [[?x, ?y], [?v, ?w]].τmmßτ
|
108
|
+
|
109
|
+
assert_equal [1, 1, 1], "abc".τm∅₁τ
|
110
|
+
require 'y_support/all'
|
111
|
+
@a = ["a", "b", "c"]
|
112
|
+
exp = [[["a"], ["b"], ["c"]],
|
113
|
+
[["a", "b"], ["c"]],
|
114
|
+
[["a"], ["b", "c"]],
|
115
|
+
[["a", "b", "c"]]]
|
116
|
+
rslt = ( 0...2**( @a.size - 1 ) )
|
117
|
+
.τm«_M﹪_mτ( "%0#{@a.size - 1}b", &[:τmᴇ⁇τ, ?0, ?+, ?,] )
|
118
|
+
.τm→ι←J_m﹪τ( '', "[@a[%s]]", [*0...@a.size] )
|
119
|
+
.τm→←_mτ( '[', ']', &method( :eval ) )
|
120
|
+
assert_equal exp.sort, rslt.sort
|
108
121
|
end
|
109
122
|
end # class
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pyper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- boris
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-
|
11
|
+
date: 2013-07-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: shoulda
|
@@ -59,7 +59,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
59
59
|
version: '0'
|
60
60
|
requirements: []
|
61
61
|
rubyforge_project:
|
62
|
-
rubygems_version: 2.0.
|
62
|
+
rubygems_version: 2.0.3
|
63
63
|
signing_key:
|
64
64
|
specification_version: 4
|
65
65
|
summary: 'Methods car, cdr, caar, cadr, cdar, caaar, caadr, ... are well known from
|