カレー研究家・スパイシー丸山のブログです。 カレー食べ歩き、カレーレシピ、カレー豆知識、カレーニュース、スパイスの話etc.カレーにまつわるトピックを日々発信しています。 ※定期的に情報をアップデートしています(最終更新2022年10月) 南インド料理店。 かつては数えるほどしかなかったのに、 東京はかなりの数になりましたね!!!! 大好きな南インド料理をもっと多くの人に楽しんでもらうべく 東京の南インド料理店をわかりやすくまとめてみました。 区や市で大きく分け、さらに駅名で細かく分けています。 南インド料理専門店ではないものの、 南インド料理が評判のお店も載せてあります。 ※タイトルはわかりやすく“東京”と書いてみましたが神奈川、千葉、埼玉のお店もあります。 暑くなると 南インド料理特有の酸味と辛みがさらに心地好く感じるんですよね!! この夏は、南インド料理を思いっきり楽しんでいきましょ
RubyのProcの説明は巷に溢れているから今更感があるけどここ数回Procを使ったネタを書いていたらProcがかわいくなっちゃってもっとみんなにもProcのこと知ってもらいたいという欲求が生まれてきたからProcについての基本的なことを僕なりのやり方でここに書くよ。長いよ。 Rubyの関数(メソッド) Rubyにおいて関数(メソッド)はファーストクラス(オブジェクト)ではありません。つまり文字列や数字や配列などの他のオブジェクトとは異なって、Rubyではそれを直接変数に代入したり、他の関数に渡したりすることはできません。 def square(n) n * n end sq = square # squareメソッドを変数sqに代入してみる # ~> -:1:in `square': wrong number of arguments (0 for 1) (ArgumentError)
rubyで1引数関数をmapに渡す場合は、こんなかんじでメソッドのシンボルをProcオブジェクトとして渡せて関数プログラミングっぽい書き方ができるんだけど、 irb > ('a'..'c').map &:upcase => ["A", "B", "C"] 2引数になるとどう書けばよいんやろうと思ってたのだけど、パーフェクトRuby読んでたら、9.3章MethodオブジェクトとProcオブジェクトのところにこんな書き方が載ってた。 irb > (0..10).map &2.method(:*).to_proc => [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20] ぜんぜん直感的じゃないけど、数字の2のインスタンスから乗算メソッド*のMethodオブジェクトを取得して、Procオブジェクトに変換して渡してる。数字の2はMehtodオブジェクトのレシーバとして束縛
最近、いろいろな言語で続々、実装されていく関数型プログラミング技法。 今回は、Python2.7 に標準( 一部、import )に備わっていて、Python で いますぐにでもおこなえる 関数型プログラミング技法の実現手法 & 利用モジュール と メソッドについて、1ヶ所にまとめて整理してみた。 ( 目次 ) map() で 高階関数を実現 filter() で 高階関数を実現 reduce() で 高階関数を実現 & 再帰呼び出し関数 closure で 高階関数を実現 functools.partial() でカリー化(関数の部分適用)を実現 generator(ジェネレータ式)で遅延評価を実装 yield(イールド式)で遅延評価を実現 以下のコードは、この記事末尾に記載した数多くの参考ウェブサイトを参考、引用しています map() は、関数を引数に受け取る「高階関数」(関数型言語)
積ん読してあった「ふつうのHaskellプログラミング ふつうのプログラマのための関数型言語入門」を読んだんだけど、 その中にポイントフリースタイルというのが書いてあったので、 同じような事がJavaScriptでもできないか試してみる。 本書によると、ポイントフリースタイルっていうのは関数で関数を 定義しながらプログラミングをするコーディングスタイルの事だそうだ。 要は関数合成や引数の部分適用などにより高階関数を返すような関数を定義し、 それを呼び合いながらプログラムを書こうってこと。 JavaScriptは高階関数を扱えるので近い事はできそうだ。 引数の部分適用 まずは関数が引数の部分適用をできるようにする。つまりカリー化。 よくある、curry関数に関数と引数を渡す事で部分適用された関数を返すという方法だと 再度、部分適用する時に何度もcurry関数を呼び出す必要がある。 こんな風に
Python のデコレータはなかなか面白い機能だと思ったので、試しにカリー化を実装してみました。 @curry def f(x,y,z): ... などと書くと、カリー化されたfが定義されます。まぁ functools.partial があれば全然必要無いシロモノではあるのですが。 複数まとめて関数適用するとき f(x)(y)(z) とか気持ち悪いので、f.apply(x,y,z) みたいに普通っぽく呼び出せるようにもなっています。 可変長引数とは相性悪いです(*付き引数=引数1個ぶんとして扱われます)。 def arity_of(f): return len(f.func_code.co_varnames) class curry: def __init__(self, f, n=None, args=None): self.func = f self.arity = n if n !=
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く