tsurushuuの日記

2012-01-08

関数のリストへのmap

01:10

覚え書きです。

リストの全ての要素に対して関数fを適用には、map を使いますが、

逆(?)に、リスト内の全ての要素(関数)に対して特定の値を入力する場合にも、mapが使える。

ただし、mapの第一変数には、関数が必要なので直接特定の値を置くことができない。

そんなとき、($)が使える。ちゃんとドキュメントに書いてある。

map f [0..9] -- 普通のmapの使い方

map (\f -> f x) [f1, f2] -- 丁寧に関数として書くとこうなる
map (\f -> f $ x) [f1, f2]
map (\f -> ($ x) f) [f1, f2]
map ( ($ x) ) [f1, f2]
map ($ x) [f1, f2] -- ここまで書き下せる

Criterionでベンチマークのレポート出力

19:38

ProjectEulerで悩んでいて、どのくらいの時間がかかっているのかの時間計測をしようと思ったのだが、Windowsにはtimeコマンドのような計測コマンドはあまり見つからないし、自分で時間の計測を書くのも億劫だなぁと思っていたら、criterionというのがあったようなので使ってみた。

ただ、「criterionでは、複数のペンチを比較するような用途には使えないよ」ということだったのだが、ヘルプを見てると、どうやら、詳細レポートページの出力が可能になっている模様。

main = do
	defaultMain $
		map (\n -> bench (show n) $ nf hoge n) [50, 100, 200, 500, 1000, 2000]
> main -o test.htm

f:id:tsurushuu:20120108193707p:image

見事なまでの最悪の計算量・・・

IanIan2013/03/31 21:17AFAICT you've covered all the bases with this anwser!

ofblxsenllbofblxsenllb2013/04/04 14:19Rs3RSp <a href="http://mdakefghgkyh.com/">mdakefghgkyh</a>

xfniryvstxfniryvst2013/04/04 20:09ylKRe4 , [url=http://iabdrluirnri.com/]iabdrluirnri[/url], [link=http://dvbvrtvtkfcv.com/]dvbvrtvtkfcv[/link], http://cdvmjoafpozv.com/

2011-11-30

.patchを分割

22:09

git のformat-patch で作成できる.patchファイルは、複数のコミットを一つのファイルで出力出来る。

だが、これをいっぺんにgit am などで適用しようとすると、どこかでミスる場合があり、

そんな場合は、patch ファイルの中を分割して適用すると、どこがダメなのかわかりやすい。

そこで、patchファイルを分割するコードを書いてみた。

(patchファイルの正式なフォーマットとか調べてないので、ちょっと適当。)

また、line endingをまったく考慮していないので、実際には面倒くさいことになる。

デフォルトでは CRLF でファイル出力されてしまい、失敗してしまうので、テキストエディタなどで変換が必要。

hSetNewlineMode で、モードをセットしてやれば、制御は可能だが・・・

http://haskell.org/ghc/docs/6.12.2/html/libraries/base-4.2.0.1/System-IO.html#25

また、パッチ内で、実際に、line endingの変換をしてしまっている場合などは、そもそも、デフォルトのline modeをセットする方法では解決できない。



このコードを書いていて気づいたが、そもそも、git am が失敗するような状況は、line endingや文字コードの問題が多いので、今回のコードで分割したところで、

あまり解決にはならなかったかもしれない。。。

JaydenJayden2012/01/06 01:01THX that's a great aenwsr!

eohlapxmbueohlapxmbu2012/01/06 03:11HcWW2d <a href="http://cimsmxfwpyxr.com/">cimsmxfwpyxr</a>

yujgtqzunfyujgtqzunf2012/01/08 20:34pcSl34 <a href="http://zanoftreidal.com/">zanoftreidal</a>

poosxiopoosxio2012/01/09 00:51G0dQ2l , [url=http://gebrxhszbraq.com/]gebrxhszbraq[/url], [link=http://mqdksrdekhfc.com/]mqdksrdekhfc[/link], http://bwistznijtlm.com/

ShortyShorty2016/05/10 22:11Yup, I too believe some of them will come to MWC 2013. PureView with 41 MP and optical stabilization though may come but it will again become a specialist device , if camera bump still remains. Let’s hope Graphene sensor becomes re.tblyaSymiian with better screen resolution and may be some new form of pureview innovation and xenon is always welcome.

JodyJody2016/05/13 08:46Lismonisate na anaferete tis Oskarikes ermineies:-tou monou Gigvioslauou-pou-mooazei-me Alvano , diwkti tou Goran.-Tou Panagiwtidi ws apatimenou , pou oi epikes skines zilias pros tin Mimi episkiazan ton Polemo twn Rose. http://lptqjaeaqls.com [url=http://dkuqbcwfc.com]dkuqbcwfc[/url] [link=http://horyddu.com]horyddu[/link]

2011-11-23

gtk2hsのインストール

00:28

gtk2hsのインストールで、かなり手こずったので、以下に覚え書き。それにしても、すんなり通った試しが無い。。。

Windowsでインストール

00:41

Windowsでgtk2hsをインストールするのに手こずった。。

それにしても、HaskellGUI(とくにWindows)は、障壁が多いし、メンテナンスされていないものが多い。

以下に、対処方法の覚え書きを置いておきますが、この方法が正しいのかどうか不明なので、まずは、マニュアル通りにインストールするのが良いと思います。

http://www.haskell.org/haskellwiki/Gtk2Hs/Windows

cabal install glibで失敗

cabal install gtkの途中で失敗するが、細かく見ていくと、cabal install glibの途中で、pkg-configのバージョンがダメ、などとエラーが出る。

Gtk+のbinフォルダをPATHに追加することで対処出来たが、この方法で良いのかどうか不明

cabal install pangoで失敗

http://www.haskell.org/haskellwiki/Gtk2Hs/Windows この通りやっても、途中で失敗した。

検索したところ、以下のページを参考に、cabal unpack pango をして、ソース内の、 <glib/glib.h> を、 <glib.h> にしたらインストール成功

http://progandprog.blogspot.com/2011_04_01_archive.html


gladeのインストール

インストールしたGTK+の場所(パス)に、スペースが入っていると失敗する。。

(PKG_CONFIG_PATH に設定するGTK+のパスに、スペースが入っていると、cabal install gladeで、Cのライブラリが無いといわれる。)

(このことは、別のページのどこかに書いてあったと思うが、今となっては見つからない。)

exeの実行時に、dll内の関数が無いというエラー

古いGtkランタイムをインストールしてしまっていると、その中の同名dllを読んでしまっていて、エラーになる。

古いランタイムはアンインストールしておくべし。。

OSXでインストール

00:41

以下の、Homebrewを使う方法を参考にした。この際、Macportsはアンインストールした。

http://www.haskell.org/haskellwiki/Gtk2Hs/Mac

brew install gtk 途中でワーニングやエラー

    • use-clang オプションを付けて実行

その後、gtk-demoは成功したが、実際にはサンプルのビルドが出来ず。

cabal install gtk2hs-buildtoolsは成功しているが、cabal install gtkが失敗している模様。

どうやら、必要なバイナリにパスが通っていないらしい。

/Users/xxxx/Library/Haskell/bin にパスを通してから cabal install gtkで成功。

実行時

00:41

生成したgladeファイルの読み込み ( GtkBuilder vs Libglade )

このチュートリアルは、少し古い?

GtkBuilder で作成されたファイルは、上記のチュートリアルの方法では実行出来ない。(※ 対応していないものだと思っていたが、実は、別の方法で実行可能だということが後で判明。。 )


Gladeでプロジェクトを新規作成する際に、設定ダイアログが表示される。ここで、「プロジェクト・ファイルの形式」という設定にて、「GtkBuilder」と「Libglade」が選択できて、ここで、「Libglade」を選択する必要がある。この設定をしないと、xmlNew で読み込む際にワーニングと同時に失敗してしまう。(意味はよくわからないが。)

 Just xml <- xmlNew "hellogtk2hs.glade"

もし、間違った設定でGladeのプロジェクトを作成してしまっていても、「編集」>「設定」で設定出来る。


GtkBuilderのファイルの場合は、下記を参考にすれば、ちゃんと使える。


キーイベント

先ほどのチュートリアルにて、練習問題として、「リターンキーで処理する」というお題があったので、挑戦していたら、これも、時間がかかってしまった。

チュートリアル内で、既に登場している、onDestroy などと同じ階層に、onKeyPressというのがあるが、ここでは、(Event -> IO Bool)という関数が必要。ここで、受け取ったキーイベントが、どのようなキーが押されているのかを判定する処理が必要。 eventKeyName で、どのキーなのかを調べることが出来るが、この名前が、何かと衝突している。import する際に、as で別名をつけるのが簡単な方法。

import Graphics.UI.Gtk.Gdk.Events as GdkE

	let set_name entry label = do
		name <- get entry entryText
		set label [labelText := "Hello " ++ name]
	onClicked applyButton $ do set_name entry label
	onKeyPress window $
		(\x -> do
			case (GdkE.eventKeyName x) of
				"Return" -> set_name entry label
				"Escape" -> widgetDestroy window
				name -> return () -- print name
			return (GdkE.eventSent x)
			)


後で読む

http://www.muitovar.com/gtk2hs/index.html

ShojiShoji2013/03/29 19:19Very valid, pithy, sucincct, and on point. WD.

rwqyljujrwqyljuj2013/03/31 22:382PZzeG , [url=http://oxviwjrbtcfv.com/]oxviwjrbtcfv[/url], [link=http://ztxsvybgiwfq.com/]ztxsvybgiwfq[/link], http://lflsdgvklrhf.com/

2011-10-04

getArgsで日本語を扱う

00:46

引数に日本語を入れた場合、getArgsでうまくいかないのだが、

System.Environment.UTF8.getArgs を使うと上手くいった。

しかし、ここを見ると、どうやら、バグらしく、、、

http://stackoverflow.com/questions/4076656/ghc-6-12-1-system-environment-getargs-and-utf-8

closeされているのが5ヶ月前なので、まだ反映されていないというだけ?

http://hackage.haskell.org/trac/ghc/ticket/3309

module Main where

import qualified System.Environment.UTF8 as U8_E

main = do
  argsU8 <- U8_E.getArgs
  print $ show argsU8
  print $ unwords argsU8
  putStrLn $ unwords argsU8

実行結果

$ ./echo あ "天気" test
"[\"\\12354\",\"\\22825\\27671\",\"test\"]"
"\12354 \22825\27671 test"
あ 天気 test

CaydenCayden2012/01/06 16:12Okay I'm convinced. Let's put it to atoicn.

twozcwtwozcw2012/01/06 20:04tA5hNG <a href="http://iquzhybtzday.com/">iquzhybtzday</a>

sxhkyumgxsvsxhkyumgxsv2012/01/07 23:49ne7Zln , [url=http://lcyhdxxybrap.com/]lcyhdxxybrap[/url], [link=http://adrwzszytgbr.com/]adrwzszytgbr[/link], http://wheppvlqnslf.com/

jhhbjwmjhhbjwm2012/01/09 23:26Uh0OXS <a href="http://rgltimzegxns.com/">rgltimzegxns</a>

2011-10-02

Data.Graph.Inductive.Graphviz

23:14

Data.Graph.Inductive.Graphviz に、グラフからGraphvizのデータにするライブラリがある。また、Data.Graph.Inductive.Example には、簡単なグラフのサンプルがあるので、ソースを見れる。

dot がエラーをはくので、portでgraphvizをアップデート。(perlのアップグレードとかしだして、かなり待たされた。)アップデートしたら、正常に動作した。

RayshelonRayshelon2012/01/06 07:32Super jazzed about gtientg that know-how.

hlinyyrvehlinyyrve2012/01/06 19:15FoEddY <a href="http://rjahwczipyqk.com/">rjahwczipyqk</a>

zvlohipcljxzvlohipcljx2012/01/07 23:01YRsHbt , [url=http://cnjduzmawwpc.com/]cnjduzmawwpc[/url], [link=http://arsjzdgnvkxz.com/]arsjzdgnvkxz[/link], http://hiqoukvidaeh.com/

alxubgualxubgu2012/01/08 20:4112WdZu <a href="http://vozlcsqnuvrk.com/">vozlcsqnuvrk</a>

ciatzdciatzd2012/01/11 03:39EeYtsY , [url=http://qmfujonsyodi.com/]qmfujonsyodi[/url], [link=http://nfowzusuddwt.com/]nfowzusuddwt[/link], http://cykogtbbgiec.com/