Skip to content

Instantly share code, notes, and snippets.

View taiki45's full-sized avatar

Taiki Ono taiki45

View GitHub Profile
@taiki45
taiki45 / lambda_and_closure.md
Last active December 20, 2015 02:38
λ式とクロージャ 〜手続きと環境のハーモニーを探して〜

λ式とクロージャ

手続きと閉包

前提

ここでは手続きまたは関数ともに純粋なものを扱う。

  • 関数は渡される引数が同じであれば常に同じ値を返す
  • 関数は変動する外部の変数を参照しない
  • 関数には副作用がない
module Memoize
def memoize(*names)
names.each do |name|
target = instance_method(name)
wrapped = lambda do |arg|
@_cache_ ||= {}
@_cache_[name] ||= {}
@_cache_[name][arg] || @_cache_[name][arg] = target.bind(self).call(arg)
end
define_method name, &wrapped
@taiki45
taiki45 / play_with_ruby.rb
Created November 9, 2012 13:40
fun! ruby!
fact = lambda {
|pr, x| x * pr.((x - 1), pr)
}.curry.(lambda {|x, pr| x <= 0 ? 1 : x * pr.((x - 1), pr) })
a = Class.new.instance_exec(fact) do |fact|
define_method(:fact, fact)
self
end.new
p a.fact 5
def pass_env(x = 9)
binding
end
def closure(y = 3)
Proc.new { y }
end
pass_env closure do |cl|
cl.call
@taiki45
taiki45 / eval_binding.rb
Created October 31, 2012 13:17
after reading RHG
def closure(x = 3)
Proc.new { x }
end
a = closure
a.call #=> 3
a.binding.eval "x" #=> 3
@taiki45
taiki45 / RbArray.php
Created October 10, 2012 18:53
practice for php.
<?php
class RbArray
{
function __construct(){
$this->array = $this->get_val(func_get_args());
}
private function get_val($val){
if(is_array($val) && is_array($val[0])){
return $this->get_val($val[0]);
@taiki45
taiki45 / weather_jp_parse.rb
Created October 1, 2012 15:49
weather_jp .pase sample
require 'weather_jp'
WeatherJp.parse "東京の今日の天気"
#=> #<DayWeather:@city_name = 東京都 東京, @day=今日, @forecast=曇り, @max_temp=25, @min_temp=20, @rain=30>
WeatherJp.parse("今日のうどん県の天気教えて下され〜〜").to_s
#=> "香川県 高松の今日の天気は曇のち晴 最高気温25度 最低気温17度 降水確率は20% です。"
@taiki45
taiki45 / tenki_usage.rb
Created September 22, 2012 06:56
for blog
## Simple Usage
# creat weather object in differrnt ways
tokyo = WeatherJp.get :tokyo
tokyo = WeatherJp.get "東京都府中市"
minato = WeatherJp::Weather.new("東京都港区")
# get weather info as String
tokyo.today.to_s
#=> can be "東京都 東京の天気は曇りのち晴れ、最高気温34度...etc"
@taiki45
taiki45 / ruby-install
Last active October 10, 2015 18:18
Ruby install 覚え書き
# Ruby install 覚え書き
# gcc make gcc-c++ zlib-devel httpd-devel openssl-devel curl-devel libreadline-dev readline-dev あたりがはいっているか確認
# install rbenv
$ cd
$ git clone git://github.com/sstephenson/rbenv.git .rbenv
$ echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
$ echo 'eval "$(rbenv init -)"' >> ~/.bashrc
$ source ~/.bashrc
@taiki45
taiki45 / Weather.rb
Created August 1, 2012 17:53
Weather info to Ruby object for Japan users
# -*- encoding:utf-8 -*-
#
# Usage
#
# tokyo = Weather.new :tokyo
# okinawa = Weather.new("沖縄")
# fuchu = Weather.new("東京都府中市")
#
# puts fuchu.get_weather(:today).to_s
# puts fuchu.get_weather(0).to_s