はてなキーワード: MAPとは
コード書き始めて1ヶ月強ですが、なかなかC++の仕様が把握できません。
今日はポリモーフィッククラスの扱いがよくわからなくてハマッったりしました。
書いたコードは2,3000行くらい。図形処理のアルゴリズムが難しくて相当苦しみました(まだ未完成)。
テストケースをあまりきちんと洗い出してないからこれから困ると思います。
OOP的に正しい設計とか未だによくわからないし…(設計始めたのはさらに1ヶ月前くらい)。
ギークとまではいかないにしても、何とかして「そっち側」に行きたいのです。
スキルを身につけるという意味では、実際どのくらいのタイムスパンを見込むべきでしょうか。
とか、終わってもいないのに増田に書いちゃう集中力のなさも問題です。
http://anond.hatelabo.jp/20080524092956
どこでも入れるよ。4000円代なら男女の区別はあまりない。それ以下だと男向けが多いかな。
この時期、美容院の新入りが割引ビラ配ってると思うけど、歩いてて見かけない?
上京以来ということは2ヶ月切ってないのか、1000円カットの店でたまに上手な人がいるから試してみれば?
ド下手も多いけど、育児の合間にパート感覚で働いてるような女の人がたまに上手でコスパ高かったりする。
で、こちらも質問させて。
1.ipod touchのサファリでgoogle map見てたら画面を横に倒して縦に戻したときに地図が切れて見えるのはどうして?俺だけ?
2.野良無線に接続してネット見たら、野良無線の主にこちらが何を見てるかばれるの?
教えて増田。
今回、洩れていたauth,gw,mail,nsを加えている。
% diff resolve.old resolve.txt | grep '[<>]' | sort < 125.206.202.66: graph.hatena.ne.jp. < 125.206.202.66: i.hatena.ne.jp. < 125.206.202.66: map.hatena.ne.jp. < 125.206.202.66: q.hatena.ne.jp. < 221.186.146.26: mail.hatelabo.jp. < 221.186.146.27: www.hatena.ne.jp. < 221.186.146.28: anond.hatelabo.jp. < 221.186.146.28: hatelabo.jp. < 221.186.146.28: music.hatelabo.jp. < 221.186.146.28: searchplus.hatelabo.jp. < 221.186.146.28: serif.hatelabo.jp. < 221.186.146.28: sns.hatelabo.jp. < 221.186.146.28: sv.hatelabo.jp. < 221.186.146.28: wordlink.hatelabo.jp. < 221.186.146.28: world.hatelabo.jp. < 61.196.246.68: screenshot.hatena.ne.jp. < sv.hatelabo.jp.: www.hatelabo.jp. > 221.186.146.26: mail.hatena.ne.jp. > 221.186.146.26: ns.hatena.ne.jp. > 59.106.108.66: gw.hatena.ne.jp. > 59.106.108.86: www.hatena.ne.jp. > 59.106.108.87: screenshot.hatena.ne.jp. > 59.106.108.88: map.hatena.ne.jp. > 59.106.108.89: i.hatena.ne.jp. > 59.106.108.90: auth.hatena.ne.jp. > 59.106.108.92: graph.hatena.ne.jp. > 59.106.108.93: anond.hatelabo.jp. > 59.106.108.93: hatelabo.jp. > 59.106.108.93: mail.hatelabo.jp. > 59.106.108.93: music.hatelabo.jp. > 59.106.108.93: rokuro.hatelabo.jp. > 59.106.108.93: searchplus.hatelabo.jp. > 59.106.108.93: serif.hatelabo.jp. > 59.106.108.93: sns.hatelabo.jp. > 59.106.108.93: sv.hatelabo.jp. > 59.106.108.93: wordlink.hatelabo.jp. > 59.106.108.93: world.hatelabo.jp. > 59.106.108.93: www.hatelabo.jp. > 59.106.108.99: q.hatena.ne.jp.
気がつくと、61.196.246.64/29と125.206.202.64/29が消え221.186.146.24/29が残るのみとなった。
おそらくこれで移転完了だろう。そこで、改めてサーバ一覧を示す。
inetnum: 221.184.0.0/13 (221.184.0.0 -221.191.255.255) netname: OCN-JPNIC-JP inetnum: 221.186.146.24/29 (221.186.146.24 - 221.186.146.31) netname: HATENA 221.186.146.26: mail.hatena.ne.jp. 221.186.146.26: ns.hatena.ne.jp. 221.186.146.26: sv.hatena.ne.jp. 221.186.146.27: hatena.ne.jp. inetnum: 59.106.0.0/16 (59.106.0.0 - 59.106.255.255) netname: SAKURA inetnum: 59.106.108.64/26 (59.106.108.64 - 59.106.108.127) netname: HATENA 59.106.108.66: gw.hatena.ne.jp. 59.106.108.67: red.hatena.ne.jp. 59.106.108.67: red3.hatena.ne.jp. 59.106.108.68: mobile.hatena.ne.jp. 59.106.108.69: f.hatena.ne.jp. 59.106.108.70: rimo.tv. 59.106.108.71: mgw.hatena.ne.jp. 59.106.108.72: b.hatena.ne.jp. 59.106.108.73: g.hatena.ne.jp. 59.106.108.74: a.hatena.ne.jp. 59.106.108.75: r.hatena.ne.jp. 59.106.108.76: ring.hatena.ne.jp. 59.106.108.77: d.hatena.ne.jp. 59.106.108.78: w.hatena.ne.jp. 59.106.108.81: counter.hatena.ne.jp. 59.106.108.82: search.hatena.ne.jp. 59.106.108.84: h.hatena.com. 59.106.108.84: h.hatena.ne.jp. 59.106.108.86: www.hatena.ne.jp. 59.106.108.87: screenshot.hatena.ne.jp. 59.106.108.88: map.hatena.ne.jp. 59.106.108.89: i.hatena.ne.jp. 59.106.108.90: auth.hatena.ne.jp. 59.106.108.92: graph.hatena.ne.jp. 59.106.108.93: anond.hatelabo.jp. 59.106.108.93: hatelabo.jp. 59.106.108.93: mail.hatelabo.jp. 59.106.108.93: music.hatelabo.jp. 59.106.108.93: rokuro.hatelabo.jp. 59.106.108.93: searchplus.hatelabo.jp. 59.106.108.93: serif.hatelabo.jp. 59.106.108.93: sns.hatelabo.jp. 59.106.108.93: sv.hatelabo.jp. 59.106.108.93: wordlink.hatelabo.jp. 59.106.108.93: world.hatelabo.jp. 59.106.108.93: www.hatelabo.jp. 59.106.108.97: d.hatena.com. 59.106.108.97: hatena.com. 59.106.108.97: m.hatena.com. 59.106.108.97: m.hatena.ne.jp. 59.106.108.97: s.hatena.com. 59.106.108.97: s.hatena.ne.jp. 59.106.108.98: w.hatena.com. 59.106.108.99: q.hatena.ne.jp.
どうして「一般的に」言えると思ったの?
ミソジニー非モテは極端な主張になりがちなので叩く人とかも乱入してきて目立つけど、決して多数派ではないと認識してるけどなあ。非モテMAPでも見て、いろんなスタンスがあるのを再確認してみては。
いまのところ言えるのは「非モテの原因のひとつとしてミソジニーがある」くらいで、それも多数ある原因のひとつくらいの位置付けで、全然イコールじゃないと思う。個人的には「ミソジー=>非モテ(ミソジニーだから非モテ、ミソジニーだと非モテになりやすい)」はあるかもしれないけど、「非モテ=>ミソジニー(非モテだからミソジニー、非モテであればミソジニー)」はちょっと無理があると思ってる。前者の膨大さに比べて後者は狭すぎるという意味で。
俺自身は非モテであるにもかかわらずミソジニー要素が少ないように思える。
むしろ「女性に幻想を抱いている」という非難が当てはまるくらい。
かといって、モテ的なものが嫌いでないわけではなく、リア充的趣味や
世にいう恋愛文化への反発は強かったりする。
それは古典的な非モテっつーか、当たり前過ぎていまさらなんでわざわざ言う人がいないだけで、いまだに結構多くの人がそんなもんじゃないかなあ。ネットの議論は特にそうなりがちなんだけど、ちょっと新しい論点が出てくるとそれで埋めつくされがちで、なかなかバランスのとれた議論が出来ないし。今はたまたまミソジニーがホットだっただけでは。
ただ、ミソジニーも幻想を抱くのも極端な関心の裏表で、目の前の相手のことを1人の人間として扱うことが出来ず、カテゴリー(女だから/男だから)でしか認識出来ないという共通点があるので、そこをついて幻想派も「ミソジニーと同類」と攻撃されることがあるかもしれないな。つーか増田でもよく見る攻撃の仕方だよ。この手のレトリックを使う奴は大抵性質悪いし相手しても得るものはないから、引っ掛からないように気をつけた方がいい。
実行してみたら出力に変化がなかった。アルェー?
# tree -pugs | perl -e '@line=<>; $max=(sort {$b<=>$a} map {/^(.*?)\[/; length($1)} @line)[0]; map {s/^(.*?)\[/$1 . " "x($max-length($1))."\["/e} @line; print @line'
毎回正規表現考えるのも面倒かなーとかとか。
理想を語ると出力形式指定できれば最強だなーとか妄想してた。
この辺は、ファイルにして ~/bin に放りこんで、自分好みに育て上げる、ってのがエロゲ^H^H^Hギークの楽しみ方かと。
雛型的には↓かなぁ。どうだろ。弾・monger・コーガイ氏が登場したら……滅多切りさるかもw
#!/usr/bin/perl use strict; use warnings; use Getopt::Std; use vars qw($opt_t); # オプション処理 getopts('t'); # $opt_tがセットされていたらタブ処理、ということにする。 # コマンド起動 # 引数処理とかシグナルとか面倒なところは…… open TREE, "tree -pugs ".join(" ",@ARGV,"|") or die; my @line = <TREE>; # 富豪的にいく close TREE; # ここで子プロセスの処理だっけ? # それともwaitするんだっけ? # ツリー表示部分の最大長を求める。 my $max=(sort {$b<=>$a} map {/^(.*?)\[/; length($1)} @line)[0]; # 色々やる時はユーザ名とかグループ名とかファイル名とかの最大長がいるかも foreach (@line) { if ($opt_t) { # タブ(\t)で位置をそろえるとか…… } else { s/^(.*?)\[/$1 . " "x($max-length($1))."\["/e; } print; }
treeへのオプションの与え方とか、それによる出力の変化とか考えると、結構面倒だけど、自分用に決め打ちしとけば何とかなるでしょう。
あと、「[%p<>%u<>%g<>%s]」みたいなのはCPANに転がってたりしそうな気もするので、それを使うとか。
そんなところでなかろうか。
[追記]
http://search.cpan.org/~darren/String-Format-1.14/Format.pm というのがあった。
反応してくれた人がイター!
ちょっと嬉しい。
> 別にrubyでもsedでも良いけど、正規表現で問題なくパース出来るんじゃない?
毎回正規表現考えるのも面倒かなーとかとか。
> 位置あわせでよいのかな?ほかにある?
理想を語ると出力形式指定できれば最強だなーとか妄想してた。
--output-style "[%p<>%u<>%g<>%s] %n"
とすると
| |-- [-rw-r--r--<>hoge<>hoge<>9108] HTTP_BAD_GATEWAY.html.var
みたいな。
別にコマンド的である必要はまったくないっす。
> # tree -pugs | perl -e '@line=<>; $max=(sort map {/(.*?)\[/; length($1)} @line)[0]; map {s/(.*?)\[/$1 . " "x($max-length($1))."\["/e} @line; print @line'
実行してみたら出力に変化がなかった。アルェー?
何にせよPerlじゃね?ってのは超同意。
とかく出力形式を指定できたら便利だなーと。
この手のディレクトリ状況調べて提出してちょ、みたいな要求はちらほらあるのですよ。
付け加えると、CSVで出してちょーみたいな要求の場合はfindとかlsとかgrepとかその辺組み合わせてどうにでもなる感じです。
| |-- [-rw-r--r-- hoge hoge 9108] HTTP_BAD_GATEWAY.html.var
を前提に。
別にrubyでもsedでも良いけど、正規表現で問題なくパース出来るんじゃない?
位置あわせでよいのかな?ほかにある?
なんにせよ、基本的にperlじゃね?って感じで。
# tree -pugs | perl -e '@line=<>; $max=(sort map {/(.*?)\[/; length($1)} @line)[0]; map {s/(.*?)\[/$1 . " "x($max-length($1))."\["/e} @line; print @line'
かな?たぶん。
NabeAtzzが空前のブームということで俺もRubyで書いてみた。
list = %W/ さん ろく きゅう じゅうに じゅうさん じゅうご じゅうはち にじゅういち にじゅうさん にじゅうよん にじゅうなな さんじゅう さんじゅういち さんじゅうに さんじゅうさん さんじゅうよん さんじゅうご さんじゅうろく さんじゅうなな さんじゅうはち さんじゅうきゅう / (1..40).map{|x| ((x % 3)==0 || x.to_s.match(/3/)) ? list.shift : x }.each {|y| print "#{y}\n" }
ひらがな化は面倒だったんで固定値だけど勘弁。
複数の興味深いメディアを登録しておいて、更新時に見出しを読むっていう実生活での活動がないんだよ。
実は、無いと言い切ると語弊がある。かなり近いのがある。リーダーズ・ダイジェスト。こいつは見事なくらいの要約雑誌で、「忙しいあなたのために」興味深い内容の記事があったらそれを紹介しましょうって奴。アメリカでは大うけしている。ただひとつ違うのは、何が興味深いかを、全部リーダーズ・ダイジェスト編集部に任せてしまうこと。日本ではだいぶ前に撤退した。「本物を読めば済むからだ」という声もあったが、編集方針が日本の大多数の層にフィットしなかったからじゃ無いかと思う。
RSSに似た登録プッシュ型のサービスは以前もネットで提供されていた。Niftyなんかがやっていたスクラップサービスって奴。対応する興味の分野をチェックしておくと、新聞の該当記事をファックスやメールで送ってくれるもの。ほぼ、RSSと言っていい。しかし、これも結果はさんさんたるもの。
RSSが斬新なのは、非PC世界に対応するものが無い技術であることだと思う。しかし、ほとんどの人は、現実の比喩の中でしかPCのアプリを使えないのではないか。
PC技術の浸透といわれるが、実際にはみんな必要になるまで興味を持っていない。たとえば、はじめはGoogle Mapsを女の子に見せてもちっとも感心してくれなかった(もちろん例外はあるが)。それが、Map上で検索できるサービスが増えてくるとぐっと引きが強くなった。待ち合わせや飲み会の場所を探すのに役に立つからだ。彼女たちは地図を頼りに歩こうとは考えない。だが、駅から近い待ち合わせ場所を探すのに、Google Mapsがどれだけ役立つかは一目で理解する。
そういうわけで、RSSリーダーが普及しなかったのは、情報に興味のある人が少なく、かつ対応する技術が実生活に無いからだと思う。ところで、「RSSリーダーとして最も使われているのはGoogle Gadget」という声があった。よくわかる。Google Gadgetって、ある種の釣り広告だもん。俺もRSSリーダーとしてはGoogle Gadgetとはてなモジュールしか使っていない。はてはRSSリーダーはモジュールのための登録ツールとして使っている。
すっごい前の記事だけど。
http://anond.hatelabo.jp/20071110221822:title
ruby だとこんな感じじゃないでしょうか。
ruby には関数はないです(多分)。全部メソッド。で、関数に見えるのはトップレベルにある Kernel オブジェクトのメソッド。メソッドを変数にして実行したいなら、method オブジェクトを作るか、send メソッドを使ってメッセージパッシングすればいい。でも普通 proc を使うと思う。
def foldr(callee, lst, obj) if lst.empty? obj else callee.call(lst[0], foldr(callee, lst[1..-1], obj)) end end def apply(callee, obj) callee.call(obj) end def plus5(num) num + 5 end def times10(num) num * 10 end def divide2(num) num / 2 end foldr(method(:apply), [:plus5, :times10, :divide2].map{|m| method(m)}.reverse, 10) foldr(method(:apply), ([:plus5, :times10].map{|m| method(m)} + [lambda {|num| num / 2}]).reverse, 10)
本日 TBS 系で放送された「ヤレデキ!世界大挑戦」の一部、「Mr.マリックのマジックトリックを見破ることが出来るのか?に挑戦するのはインドで名高い天才兄妹のスシマとクマール。」のセクションが非常に面白かった。
最近、地上波は NHK のニュースぐらいしか見ないのに、珍しく多系を見た。
私の使用しているアナログブラウン管ではそれ以上確認できず。Full HD ならもう少し見えたかも。
凄いなー made in USA。
閑話休題。
もしかしてお兄ちゃんは blog とか書いてないかなーと探してみた。
まだ見つかっていない。そもそも、「クマール」のスペルがわからん。
「スシマ」で検索すると、ヒンズー誌によるとラクノー(地名)でうんたらかんたらという日本語の記事が見つかった。
しょうがないので、ヒンズー誌を見ようと調べる。
で、ヒンズー誌って何?
ヒンズーを Wikipedia で調べて、スペルをゲット。
幾つか見ていくとヒンズー誌っぽいサイトが見つかった。
調べられそうな手がかりはラクノーという地名。
またしてもラクノーのスペルがわからん。
ラクノーを Google.co.jp でぐぐるとインドの地図が見つかった。
Google.com の map を見て、やっとラクノーのスペルが判明。
で、ヒンズー誌内を検索してみた。
それっぽいのがみつからん。
しょうがないので、もう一回、Google.co.jp でクマールとかスシマで検索。
どうやら、妹が高校の入学試験に合格した記事が出ていたのは 2007/06 っぽい。
ヒンズー誌のそこいら辺のページを見てみると、やっと兄妹の写真が写っているページを見つけた。
が、該当する記事はオンラインでは無いっぽい。
...仕事があるので、あきらめる。
カタカナで書いても良いけど、人名地名はスペルが分からなくて困りますね。
特に、欧米以外。
頻繁に会社の車を使用していた当時の事を思い出すな。ガソリンが底値で過当競争から次々とスタンドが潰れていた頃の話だ。
会社の車で現場に出たら、掃除して、満タン返しが原則になってた。掃除については、営業の人も使うからドロドロじゃあまずいよって話だったから、自分でやってもよかったんだけど、その日は現場あがりで時間はあれど疲れてたし面倒だったので会社の近所のスタンドで給油・洗車と一緒に頼むことにした。一番近いスタンドは潰れてしまったので、少し考えた挙げ句、そういえばこのへんにあったっけという程度のおぼろげな記憶で国道沿いのとあるスタンドまで適当に流す。
するとたまたま入ったそこの車内清掃がなんとまあ早くて丁寧なんだ。コーヒー1杯ぐらいの時間で実にぴかぴかになって帰ってきた。しかも料金もそう高くない。(どっちにしろ会社の金だったけどな)
スタンドのおじさんは「うちは洗車に関しては地域一番店って事でやってますから。」と誇らしげに言った。
その後、そのスタンドにはなかなか行く機会もなかったのだが、その心意気は 2度と忘れることができない。正直、「たかがガソリン」「たかが洗車」に心血を注いでいるプロの仕事に、結構感動してたんだ。
今は車に乗る機会もそうなくなったが、もしまだあの辺に住んで、車を利用する生活をしていたら、多少高くても贔屓にしただろうと思う。
まだ潰れず頑張ってるのかな。確かこのへんだったんだけど。map:x139.6278y35.4762
いや、それは実物を見てないから言えるんだよ。
銀座の雑踏から、そういう人たちだけを抽出して並べたような行列だったよ。
具体的には
ここだよ。横断歩道は渡らずに折り返していたよ。
Objective Camlを使ってみたよ!
問3はわからなかった!
let rec map f ls = match ls with hd::tl -> f hd (map f tl) | [] -> 0 in let plus x y= x + y in let rec iter f n ls= match ls with hd::tl -> (iter f (f n hd) tl) | _ -> n in let biggest ls= match ls with hd::tl -> iter (fun x y -> if x > y then x else y) hd tl | _ -> assert false in print_int(map plus [1; 4; 5]); print_int(biggest [1; 4; 32; 523; 453; 23;])
あくまで自分でこう答えるという話。
(問1)
(define fold-left (lambda (func obj lst) (cond ((null? lst) obj) (else (fold-left func (func obj (car lst)) (cdr lst)))))) (define my-sum (lambda (lst) (fold-left + (car lst) (cdr lst))))
・例
(my-sum '(1 2 3 4 5 6 7 8 9 10))
(問2)
(define fold-left (lambda (func obj lst) (cond ((null? lst) obj) (else (fold-left func (func obj (car lst)) (cdr lst)))))) (define large (lambda (x y) (cond ((>= x y) x) (else y)))) (define my-max (lambda (lst) (fold-left large (car lst) (cdr lst))))
・例
(my-max '(58 90 1 2 4 3 100))
(問3)
(define fold-right (lambda (func lst obj) (cond ((null? lst) obj) (else (func (car lst) (fold-right func (cdr lst) obj)))))) (define my-apply (lambda (func obj) (func obj))) (define plus5 (lambda (num) (+ num 5))) (define times10 (lambda (num) (* num 10))) (define divide2 (lambda (num) (/ num 2))) (define plus5-times10-divide2 (lambda (num) (let ((lst (list plus5 times10 divide2))) (fold-right my-apply (reverse lst) num))))
・例
(plus5-times10-divide2 5)
全部畳み込み関数を使っているのは、はじめ使い道がないと思ってたのにかなり使い道があることがわかったので、それを示したかったから。あとmap関数あたりはほかの言語でもあるから、すぐに思いつくだろうし。
というか最後のやつは手続きを抽象化することでリストの形で扱えるようにしているから、関数プログラミングでは重要だと思う。関数プログラミングの肝は計算によって手続きを含めたすべて表すことができることだと思っている。その例だと思うんだけどね。例えばSchemeなら上記の答えを応用して、似たような「手続き」を生み出す関数を作ることができる。
(define make-proceduce (lambda (fst . rest) (let ((lst (cons fst rest))) (lambda (num) (fold-right my-apply (reverse lst) num)))))
これを使うと次のようにできる。
(define divide2-plus5-times10 (make-proceduce divide2 plus5 times10)) (divide2-plus5-times10 2) (define divide2-times10-plus5 (make-proceduce divide2 times10 plus5)) (divide2-times10-plus5 2)
関数合成がつかえるならそっちのほうが楽だけど、リストという形で「手続き」をつくり出していることがわかるだろうか?手続きをリストで操作できるのだ。こういうのが関数プログラミングの肝だと勝手に思っている。
こうやってくると型推論や多相型の重要性もわかると思うんだよ。上記のようなことはPythonでもできる。でも高階関数はつかいすぎるとわかりにくい。どっかにバグが入ってくるかもしれない。それを機械的に防ぐのが型推論。型という観点から型推論でおかしいところを探し出してくれる。それならC言語でもいいのではないかという人もいるかもしれない。だがC言語は融通が利かない。例えばapply関数にしても引数の型が数値なら数値、文字なら文字と決まっている必要がある。だから数値に向けにapply関数を作っても文字には使えない。こうした型のデメリットをなくす一方、そのメリットを享受するためにあるのが多相型。これによってapply関数やmap関数を一般的に作ることができ、型のメリットを享受しながらデメリットをなくすことができる。このように関数で手続きなんかを抽象化するときに型推論や多相型があると便利なのだ。
http://anond.hatelabo.jp/20071021143442
その理由は知らないが、なければ作ればいいじゃないか。
class MyString(str): def length(self): return len(self)
というクラスを作って
string = MyString("Hello world") print string.count("o"), string.length()
とRubyライクにやれば
2 11
とでるよ。え、リストもlist.length()が使いたいって?それも簡単。
class MyList(list): def length(self): return len(self) l = MyList([1, 2, 3, 4, 5, 6]) l.length()
6
きちんと他のメソッドも使えるよ。
l[1:]
[2, 3, 4, 5, 6]
l.reverse() l
[6, 5, 4, 3, 2, 1]
ね。簡単でしょ。
Pythonは仕組みが統一されているものが多いので、いじりやすいのですよ。上の例のやつは組み込みのクラスオブジェクトとユーザー定義のクラスオブジェクトがおおむね統一されているからこそ簡単にできる。他にも関数なんかもほかのオブジェクトと同じオブジェクトなので、高階関数なんてもの簡単に作ることができて関数プログラミングぽくできる。例えば今はなきapply関数なんかは
def myApply(func, *args): return func.__call__(*args)
と定義できる。実際に
def sumUpThree(num1, num2, num3): return num1 + num2 + num3
でためしてみる。
myApply(sumUpThree, 1, 2, 3)
結果はちゃんと
6
とでる。将来廃止されそうなmap関数も簡単に定義できる。他にも複数の引数をもつ関数の部分適用のようなことを行う関数も次のように簡単に定義できる。
def partial(func, *oldArgs): def wrapper(*newArgs): return func.__call__(*(oldArgs + newArgs)) return wrapper
sum_1 = partial(sumUpThree, 1) sum_1(2, 3)
6
sum_1_5 = partial(sum_1, 5) sum_1_5(9)
15
sum_10_20 = partial(sumUpThree, 10, 20) sum_10_20(30)
60
こういう風に高階関数が簡単にできるのは関数がオブジェクトで関数の実行とはメソッドの呼び出しにすぎないからだ。以上のように組み込みオブジェクトとユーザー定義オブジェクトの差があまりないことや関数もオブジェクトであることに見られるようにPythonは仕組みが統一されていてシンプルだ。そのためひとつのことがわかれば他のこともわかることが多いし、簡単にいじることもできる。
だからなければpythonをいじればいいと思うよ。
最後にラムダ式信者のためにpartialをラムダ式を使って書いておく。
def partial(func, *oldArgs): return lambda *newArgs:func.__call__(*(oldArgs + newArgs))