スケジュール帳のカバーを作りました
これも1週間くらい前に作ったものです。
今スケジュール帳はほぼ日を使っているのですが、やっぱり普段持ち歩くのには大きいなぁと思っています。ダイゴーの見開き1週間のやつに乗り換えようか検討中。
しかしこのカバーはペンホルダーが大き過ぎていまいちです。近い内に作り直したいと思います。
関数型言語Ruby (2)
id:ha-tan:20070618:1182168283の続きです。パターンマッチが入り始めました。
module FunctionalRuby FUNCS = {} X = Object.new class Function def initialize(sym) @sym = sym @func = [] end def add(pat, &f) @func.push([pat, f]) end def [](*xs) @func.each do |func| pat, f = *func return f[*xs] if match_pattern?(pat, xs) end raise(ArgumentError, "no match pattern. #{@sym}") unless f end private def match_pattern?(pat, xs) return true unless pat return false unless pat.size == xs.size pat.zip(xs) do |pat, x| next if pat == X next if pat === x return false end true end end def define(sym, pat = nil, &f) FUNCS[sym] ||= Function.new(sym) FUNCS[sym].add(pat, &f) self.class.module_eval("def #{sym}; fun(:#{sym}); end") end def curry(f, *vs) lambda {|v| f[vs + [v]] } end def fun(sym) FUNCS[sym] end end
mapはこうなりました。
define(:map, [X, []]) do [] end define(:map) do |f, xs| x, *xs2 = *xs [f[x]] + map[f, xs2] end