「Map」を含む日記 RSS

はてなキーワード: Mapとは

2008-05-24

[]回答とこちらからの新質問。

http://anond.hatelabo.jp/20080524092956

どこでも入れるよ。4000円代なら男女の区別はあまりない。それ以下だと男向けが多いかな。

この時期、美容院の新入りが割引ビラ配ってると思うけど、歩いてて見かけない?

上京以来ということは2ヶ月切ってないのか、1000円カットの店でたまに上手な人がいるから試してみれば?

ド下手も多いけど、育児の合間にパート感覚で働いてるような女の人がたまに上手でコスパ高かったりする。

で、こちらも質問させて。

1.ipod touchサファリgoogle map見てたら画面を横に倒して縦に戻したときに地図が切れて見えるのはどうして?俺だけ?

2.野良無線接続してネット見たら、野良無線の主にこちらが何を見てるかばれるの?

教えて増田

2008-05-17

[]今昔その6 - 情報募集中

以下のIPアドレスに関する情報を求めています。


本社移転もあったことだし、久々に調べてみた。

今回、洩れていた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.

2008-05-06

川崎駅前の客引きには気をつけろ

http://map.yahoo.co.jp/pl?lat=35.52592676&lon=139.70218752&sc=1&mode=map&type=scroll

ここ辺りだったかな?、川崎駅前の商店街を歩いたら客引きと思しき赤い服着た太った黒人のおじちゃんに腕を掴まれた。

その時はとっさに振りほどいて逃げたんだけど川崎ってこんなに治安の悪い所だったのか?。

2008-04-20

http://anond.hatelabo.jp/20080420095749

一般的に「非モテミソジニー」と言われているが

どうして「一般的に」言えると思ったの?

ミソジニー非モテは極端な主張になりがちなので叩く人とかも乱入してきて目立つけど、決して多数派ではないと認識してるけどなあ。非モテMAPでも見て、いろんなスタンスがあるのを再確認してみては。

いまのところ言えるのは「非モテの原因のひとつとしてミソジニーがある」くらいで、それも多数ある原因のひとつくらいの位置付けで、全然イコールじゃないと思う。個人的には「ミソジー=>非モテミソジニーだから非モテミソジニーだと非モテになりやすい)」はあるかもしれないけど、「非モテ=>ミソジニー非モテだからミソジニー非モテであればミソジニー)」はちょっと無理があると思ってる。前者の膨大さに比べて後者は狭すぎるという意味で。

俺自身は非モテであるにもかかわらずミソジニー要素が少ないように思える。

むしろ「女性幻想を抱いている」という非難が当てはまるくらい。

かといって、モテ的なものが嫌いでないわけではなく、リア充趣味

世にいう恋愛文化への反発は強かったりする。

それは古典的な非モテっつーか、当たり前過ぎていまさらなんでわざわざ言う人がいないだけで、いまだに結構多くの人がそんなもんじゃないかなあ。ネットの議論は特にそうなりがちなんだけど、ちょっと新しい論点が出てくるとそれで埋めつくされがちで、なかなかバランスのとれた議論が出来ないし。今はたまたまミソジニーがホットだっただけでは。

ただ、ミソジニー幻想を抱くのも極端な関心の裏表で、目の前の相手のことを1人の人間として扱うことが出来ず、カテゴリー(女だから/男だから)でしか認識出来ないという共通点があるので、そこをついて幻想派も「ミソジニーと同類」と攻撃されることがあるかもしれないな。つーか増田でもよく見る攻撃の仕方だよ。この手のレトリックを使う奴は大抵性質悪いし相手しても得るものはないから、引っ掛からないように気をつけた方がいい。

2008-04-18

http://anond.hatelabo.jp/20080418030326

そもそも並び順を意識した配列が必要なら、mapを使うなぁ。

わざわざ一度配列に入れてからソートし直すのって、無駄だよね。

そういう点も含めて、アルゴリズムなんじゃないだろうか。

2008-04-16

http://anond.hatelabo.jp/20080415182703

実行してみたら出力に変化がなかった。アルェー?

おっと、バグが。ちゃんとテストしてなかった。すんまそん。

# 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 というのがあった。

2008-04-15

http://anond.hatelabo.jp/20080415173401

反応してくれた人がイター!

ちょっと嬉しい。

> 別に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とかその辺組み合わせてどうにでもなる感じです。

ツリー構造が見える形でいろんな出力できると楽しいよね!とかちみっと思って。

http://anond.hatelabo.jp/20080415122733

BSDな人なのでtreeはしらん、とスルー気味だったけど。

|   |-- [-rw-r--r-- hoge     hoge          9108]  HTTP_BAD_GATEWAY.html.var

を前提に。

基本:そんなときのperlじゃね?

別に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'

かな?たぶん。

2008-04-01

Google Map武蔵中原を検索

武蔵中原駅(神奈川

この場所をデフォルト登録する

次回からこのサイトの初期画面には「武蔵中原駅(神奈川)」の地図が表示されます。

この付近でよく検索されているキーワード

皮膚科

耳鼻科

ラーメン

病院

内科

眼科

富士通

ホテル

耳鼻咽喉科

歯科

検索する奴病人多すぎ。

2008-03-07

[]rubyでNabeAtzz

そろそろ FizzBuzz に飽きた - にぽたん研究所

NabeAtzzが空前のブームということで俺もRubyで書いてみた。


list = %W/
さん ろく きゅう じゅうに じゅうさん じゅうご じゅうはち にじゅういち にじゅうさん にじゅうよん にじゅうなな
さんじゅう さんじゅういち さんじゅうに さんじゅうさん さんじゅうよん さんじゅうご さんじゅうろく さんじゅうなな さんじゅうはち さんじゅうきゅう
/
(1..40).map{|x| ((x % 3)==0 || x.to_s.match(/3/)) ? list.shift : x }.each {|y| print "#{y}\n" }

ひらがな化は面倒だったんで固定値だけど勘弁。

プログラ増田のあなぐら

2008-03-01

日本極東

Google EarthGoogle Mapでもいい、福岡を中心に、札幌が円周上入るように円を書いてみよ。

その中に入る中露朝韓台の都市を列挙せよ。

2008-02-22

http://anond.hatelabo.jp/20080222101831

複数の興味深いメディアを登録しておいて、更新時に見出しを読むっていう実生活での活動がないんだよ。

実は、無いと言い切ると語弊がある。かなり近いのがある。リーダーズダイジェスト。こいつは見事なくらいの要約雑誌で、「忙しいあなたのために」興味深い内容の記事があったらそれを紹介しましょうって奴。アメリカでは大うけしている。ただひとつ違うのは、何が興味深いかを、全部リーダーズダイジェスト編集部に任せてしまうこと。日本ではだいぶ前に撤退した。「本物を読めば済むからだ」という声もあったが、編集方針が日本の大多数の層にフィットしなかったからじゃ無いかと思う。

RSSに似た登録プッシュ型のサービスは以前もネットで提供されていた。Niftyなんかがやっていたスクラップサービスって奴。対応する興味の分野をチェックしておくと、新聞の該当記事をファックスメールで送ってくれるもの。ほぼ、RSSと言っていい。しかし、これも結果はさんさんたるもの。

RSSが斬新なのは、非PC世界に対応するものが無い技術であることだと思う。しかし、ほとんどの人は、現実の比喩の中でしかPCアプリを使えないのではないか。

PC技術の浸透といわれるが、実際にはみんな必要になるまで興味を持っていない。たとえば、はじめはGoogle Maps女の子に見せてもちっとも感心してくれなかった(もちろん例外はあるが)。それが、Map上で検索できるサービスが増えてくるとぐっと引きが強くなった。待ち合わせや飲み会の場所を探すのに役に立つからだ。彼女たちは地図を頼りに歩こうとは考えない。だが、駅から近い待ち合わせ場所を探すのに、Google Mapsがどれだけ役立つかは一目で理解する。

そういうわけで、RSSリーダーが普及しなかったのは、情報に興味のある人が少なく、かつ対応する技術が実生活に無いからだと思う。ところで、「RSSリーダーとして最も使われているのはGoogle Gadget」という声があった。よくわかる。Google Gadgetって、ある種の釣り広告だもん。俺もRSSリーダーとしてはGoogle Gadgetとはてなモジュールしか使っていない。はてはRSSリーダーモジュールのための登録ツールとして使っている。

2008-02-09

なんとなく目についたから

すっごい前の記事だけど。

http://anond.hatelabo.jp/20071110221822:title

はじめはRubyで書こうと思ったけど挫折した。だれかRubyで書いてくれないかな・・・。

ruby だとこんな感じじゃないでしょうか。

# 問3だけ。pythonコードコピペ

関数オブジェクトなのに引数にできないの?なんで?

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)

2008-01-05

カタカナ汚染

本日 TBS 系で放送された「ヤレデキ!世界大挑戦」の一部、「Mr.マリックマジックトリックを見破ることが出来るのか?に挑戦するのはインドで名高い天才兄妹のスシマとクマール。」のセクションが非常に面白かった。

最近地上波NHKニュースぐらいしか見ないのに、珍しく多系を見た。

私の使用しているアナログブラウン管ではそれ以上確認できず。Full HD ならもう少し見えたかも。

凄いなー made in USA

閑話休題

もしかしてお兄ちゃんは blog とか書いてないかなーと探してみた。

まだ見つかっていない。そもそも、「クマール」のスペルがわからん。

スシマ」で検索すると、ヒンズー誌によるとラクノー(地名)でうんたらかんたらという日本語の記事が見つかった。

しょうがないので、ヒンズー誌を見ようと調べる。

で、ヒンズー誌って何?

ヒンズーを Wikipedia で調べて、スペルをゲット。

面倒なので Google.com でぐぐる

幾つか見ていくとヒンズー誌っぽいサイトが見つかった。

調べられそうな手がかりはラクノーという地名。

またしてもラクノーのスペルがわからん。

クノーGoogle.co.jpぐぐるインド地図が見つかった。

へぇー、ラクノーってこの辺かーと見当を付ける。

Google.com の map を見て、やっとラクノーのスペルが判明。

で、ヒンズー誌内を検索してみた。

それっぽいのがみつからん。

しょうがないので、もう一回、Google.co.jpクマールとかスシマで検索。

どうやら、妹が高校の入学試験合格した記事が出ていたのは 2007/06 っぽい。

ヒンズー誌のそこいら辺のページを見てみると、やっと兄妹の写真が写っているページを見つけた。

が、該当する記事はオンラインでは無いっぽい。

...仕事があるので、あきらめる。

カタカナで書いても良いけど、人名地名はスペルが分からなくて困りますね。

特に、欧米以外。

2007-12-09

http://anond.hatelabo.jp/20071209193719

頻繁に会社の車を使用していた当時の事を思い出すな。ガソリンが底値で過当競争から次々とスタンドが潰れていた頃の話だ。

会社の車で現場に出たら、掃除して、満タン返しが原則になってた。掃除については、営業の人も使うからドロドロじゃあまずいよって話だったから、自分でやってもよかったんだけど、その日は現場あがりで時間はあれど疲れてたし面倒だったので会社の近所のスタンドで給油・洗車と一緒に頼むことにした。一番近いスタンドは潰れてしまったので、少し考えた挙げ句、そういえばこのへんにあったっけという程度のおぼろげな記憶国道沿いのとあるスタンドまで適当に流す。

するとたまたま入ったそこの車内清掃がなんとまあ早くて丁寧なんだ。コーヒー1杯ぐらいの時間で実にぴかぴかになって帰ってきた。しかも料金もそう高くない。(どっちにしろ会社の金だったけどな)

スタンドのおじさんは「うちは洗車に関しては地域一番店って事でやってますから。」と誇らしげに言った。

その後、そのスタンドにはなかなか行く機会もなかったのだが、その心意気は 2度と忘れることができない。正直、「たかがガソリン」「たかが洗車」に心血を注いでいるプロ仕事に、結構感動してたんだ。

今は車に乗る機会もそうなくなったが、もしまだあの辺に住んで、車を利用する生活をしていたら、多少高くても贔屓にしただろうと思う。

まだ潰れず頑張ってるのかな。確かこのへんだったんだけど。map:x139.6278y35.4762

2007-11-26

http://anond.hatelabo.jp/20071126203403

いや、それは実物を見てないから言えるんだよ。

銀座の雑踏から、そういう人たちだけを抽出して並べたような行列だったよ。

そんな行列マリオンの裏側近くまで続いていたんだよ。

具体的には

map:x139.7621y35.6735

ここだよ。横断歩道は渡らずに折り返していたよ。

2007-11-10

http://anond.hatelabo.jp/20071110221822

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;])

Schemeによる解答

あくまで自分でこう答えるという話。

(問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関数を一般的に作ることができ、型のメリットを享受しながらデメリットをなくすことができる。このように関数で手続きなんかを抽象化するときに型推論や多相型があると便利なのだ。

2007-11-09

Pythonではなぜ string.len() でなく len() なのか?

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

sumUpThree関数テストすると

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))

Pythonラムダ式がだめだといわれているが、こんな風にかけたとして何がうれしいというのだ。

2007-10-12

ゲーム依存

ゲーム依存症直したい・・・暇あればゲーム機の前へ座ってしまう・・・

最近は晴れたり曇ったりNと水色散歩道を交互に遊んでる・・・

俺屍やりながら子供達のプロフィール作ったり、GPOで萌ちゃんプレイやって嫌われまくったり

マルにコンビニ弁当食べさせたり、サガフロやり過ぎてMAP飽きたり

ドラクエ3で妄想恋愛シミュレーションみたいなのやったり、神のフリーソフトゲームはやりきったし

ふはっ、楽しー。でも本当にやりたいのはコレじゃない・・・orz

最近気になるのはジルオールとかディスガイア2とか気になる・・・

でもジルオールって移動速度が遅くて登場人物は100人だけど仲間になるのは2、30人くらいで

画面切り替えが遅くて戦闘がつまらないらしい・・・やっぱやめよう。

仲間になる数が少ないなら、ミンサガの方が戦闘面白いから面白いのかな。

でもチビキャラが気持ち悪くて魅力に掛けるなぁ・・・

http://members.at.infoseek.co.jp/exgamer/study/study01.htm

これに9個当て嵌まった・・・ダメなのかな・・・

2007-10-03

Re: いまさら非モテMAPを見てみた

あなたは非モテではない。

今たまたまステディの居ないモテです。

そうでないのなら、暴君もしくは破壊活動家かな。

いまさら非モテMAPを見てみた

http://scarecrowbone.main.jp/etc/himotemap/himoteMap.html

俺みたいな

恋愛至上主義に対して自分を変えようともせずに反抗しようとする奴も

俺より幸せな奴も

全員死ねぶち殺してやる

という人間が属する派閥はどれなんだ。

ログイン ユーザー登録
ようこそ ゲスト さん