lib/patternmatching.rb in patternmatching-0.1.2 vs lib/patternmatching.rb in patternmatching-0.1.3

- old
+ new

@@ -1,5 +1,111 @@ -module PatternMatching -end require 'patternmatching/version' require 'patternmatching/pattern' + +module PatternMatching + # The module is only for showing example docs. + #== Using module + # # If installed from rubygems + # require "rubygems" + # gem "patternmatching" + # + # # for use + # require "patternmatching" + # + #== Structured data example + # val = 200 + # code = PatternMatching.build {plus(mul(100, 100), val)} + # + #== Partial func example + # class Calc + # extend PatternMatching + # + # func(:calcm).seems as {plus(:a, :b)} do + # calcm(a) + calcm(b) + # end + # func(:calcm).seems as {mul(:a, :b)} do + # calcm(a) * calcm(b) + # end + # func(:calcm).seems as {:value} do + # value + # end + # end + # + # p Calc.new.calcm(code) + # + #== Another partial style method example + # class CalcX + # extend PatternMatching + # + # func(:calcx) do + # seems as {plus(:a, :b)} do + # calcx(a) + calcx(b) + # end + # seems as {mul(:a, :b)} do + # calcx(a) * calcx(b) + # end + # end + # func(:calcx).seems as {:value} do + # value + # end + # end + # + # p CalcX.new.calcx(code) + # + #== Pattern matching example + # include PatternMatching + # + # def calc(code) + # make(code) { + # seems as {plus(:a, :b)} do calc(a) + calc(b) end + # seems as {mul(:a, :b)} do calc(a) * calc(b) end + # seems something do code end + # } + # end + # + # p calc(code) + # + #== Enumerable matching example + # is = build { exact([1,2,3,4,5]) } + # make is do + # seems as {exact([:a,:b, _!(:c)])} do + # puts a.to_s + ", " + b.to_s + " and " + c.to_s + # end + # seems something do + # puts "not matched" + # end + # end + # + #== Hash to Hash matching example + # dict = build { {:name => "Taro", :age => 5} } + # make dict do + # seems as {{:name => :name}} do + # puts "He is " + name + # end + # seems something do + # puts "no name" + # end + # end + # + #== Hash to non-Hash object matching example + # class Person + # def initialize(name, age) + # @name = name + # @age = age + # end + # attr :name + # attr :age + # end + # + # make Person.new("Jiro", 3) do + # seems as {{:name => :name}} do + # puts "He is " + name + # end + # seems something do + # puts "no name" + # end + # end + # + module EXAMPLES + end +end