2010-08-01から1ヶ月間の記事一覧
ghc-mod をインストールして夢のemacs上でhaskellプログラムを補完http://www.mew.org/~kazu/proj/ghc-mod/en/ をインストールしようとおもう。ubuntuのデフォルトパッケージでやることはあきらめた。 なるべく最新のGHCにして(6.12.2) cabalでいろんなもの…
リストの直積(デカルト積、カルテシアン)を内包表記→do記法→モナド→concatMapの形で表してみる。 モナドとdoが同じなのがわかって実験 内包表記 [[x,y] | x <- [1,2] , y <- [3,4]] do記法 returnが入っているところで若干 モナドを意識させる do {x <- [1…
virutualboxでubuntuServerをつくりバックグラウンドで起動させるには VirtualboxにubuntuServerを入れる。 ゲストOS名は"Ubuntu Server since 20100831"にするwubuntu serverを選択したのはXとか不要だし、常駐量は小さくしたいしね。 virturalboxを選択し…
haskellのセクションと無名関数と関数名消費 通常2引数(?)の関数を1引数の関数にするには関数名を消費する以下のような場合 *Main> let f x=x+1 in f 2 3 *Main> let f x=1+x in f 2 3これだと定義と本体と二つに分かれるのであまり好きじゃなく、つい…
haskellのbindがよくわからない(というかレイアウト) なぜcat6.hsを許すんだろう・・・と、研究開始!a.txt と b.txtを結合するものをまずdo記法で書く --:::::::::::::: --cat1.hs --:::::::::::::: main=do x<-readFile "a.txt" y<-readFile "b.txt" putS…
ghci のプロンプトがながすぎ。どうもhaskell-modeがプロンプトをみているみたいで ~/.ghciでプロンプトを設定すると挙動がおかしいので、.ghciの方をemacsにあわせる。以下を~/.ghciに設定する :set prompt "*Main> "ついでに ghciでC-pnで履歴を操作するの…
いままでLAN内の全マシンをNFSでつないでいたのだが先日いきなりマウントできなくなった。 理由がまったくわからず1週間放置していたのだがどうもNFS3->NFS4になったものと思われる。(もしくはnfs3モードでうまく動かなくなった。)ちょうど一週間前ぐらいに…
苦労の末に Prelude System.Directory> getDirectoryContents "/" >>= return.concatMap (++" ") >>= putStrLn bin lib sbin sys selinux vmlinuz . root boot usr srv cdrom vmlinuz.old initrd.img var tmp dev media opt proc mnt initrd.img.old home lo…
haskellでカレントディレクトリを表示する Prelude> :m +System.Directory Prelude System.Directory> setCurrentDirectory "/etc" "/etc" Prelude System.Directory> putStrLn getCurrentDirectory <interactive>:1:9: Couldn't match expected type `String' against in</interactive>…
追記 2010/08/20 13:21:22: ubuntu10.04以降ではhaskellのバージョンが上がって以下の問題は起きないらしい。 http://www.sampou.org/cgi-bin/w3ml.cgi/haskell-jp/msg/480 追記ここまで そこで色んな対処方があるのですが、utf8-string という素敵なパッケ…
rubyでフォルダ構造維持しながらファイルをコピーする xcopyみたいな形で第2引数に第1引数のディレクトリ以下のファイルをコピーする 第2引数のフォルダがなかったら作る src,dest=ARGV[0]||"a",ARGV[1]||"a_dash" Dir.exist?(dest)||Dir.mkdir(dist) Dir.gl…
10以下の素数の和は2 + 3 + 5 + 7 = 17である. 200万以下の全ての素数の和を計算しなさい. 昨日取得した素数列を生み出す関数ですぐ終わると思ったが計算時間が半端じゃなかった main=print $ sum $takeWhile (<2000000) primes primes = sieve [2..] sieve …
三角数の数列は自然数の和で表わされ、7番目の三角数は 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28 である。 三角数の最初の10項は1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ... となる。最初の7項について、その約数を列挙すると、以下のとおり。?1: 1?3: 1,3?6: 1,2,3,6…
以下の50桁の数字100個の総和の上位10桁を求めよ。37107287533902102798797998220837590246510135740250 46376937677490009712648124896970078050417018260538 74324986199524741059474233309513058123726617309629 919422133635741615725224305633018110724…
2^15 = 32768 であり、これの各数字の合計は 3 + 2 + 7 + 6 + 8 = 26 となる。同様にして、2^1000 の各数字の合計を求めよ。 簡単そうなのですぐやってしまった。 read [c]+0 がきもちわるいけど… Prelude> foldl (\x y->x+(read [y]+0)) 0 $ show (2^1000) …
08 02 22 97 38 15 00 40 00 75 04 05 07 78 52 12 50 77 91 08 49 49 99 40 17 81 18 57 60 87 17 40 98 43 69 48 04 56 62 00 81 49 31 73 55 79 14 29 93 71 40 67 53 88 30 03 49 13 36 65 52 70 95 23 04 60 11 42 69 24 68 56 01 32 56 71 37 02 36 91…
以下の1000桁の数字から5つの連続する数字を取り出して その積を計算する。そのような積の中で最大のものの値はいくらか73167176531330624919225119674426574742355349194934 96983520312774506326239578318016984801869478851843 8586156078911294949545950…
まさか… そんなまさか… さっき id:nobsun さんに教えてもらった [(i,j)|i<-[1..10],j<-[i+1..10]] が組合せだったなんて… Prelude> mapM_ print $ map (\x->[(i,j)|i<-[1..x],j<-[i+1..x]]) [2..6] [(1,2)] [(1,2),(1,3),(2,3)] [(1,2),(1,3),(1,4),(2,3),(2…
ピタゴラスの三つ組(ピタゴラスの定理を満たす自然数)とはa
haskellで文字列を数字に変換するにはreadを使う。 ただしreadは多相型なので後ろに型の識別子が必要。 Prelude> :type read read :: (Read a) => String -> a Prelude> read "123" <interactive>:1:0: Ambiguous type variable `a' in the constraint: `Read a' arising </interactive>…
Problem 7 † 素数を小さい方から6つ並べると 2, 3, 5, 7, 11, 13 であり、6番目の素数は 13 である。10001 番目の素数を求めよ。 再起で素数は難しいよ 値を引き回すのが面倒でしょうがない。 main = (putStrLn.show) problem problem = last $ primeList 10…
Problem 6 † 最初の10個の自然数について、その和の二乗と、二乗数の和は以下の通り。1? + 2? + ... + 10? = 385 (1 + 2 + ... + 10)? = 3025 これらの数の差は 3025 - 385 = 2640 となる。同様にして、最初の100個の自然数について和の二乗と二乗の和の差を…
2520 は 1 から 10 の数字の全ての整数で割り切れる数字であり、そのような数字の中では最小の値である。では、1 から 20 までの整数全てで割り切れる数字の中で最小の値はいくらになるか。 あれ?ghc6.10からlcmが実装されていたはずなので… main = putStrL…
左右どちらから読んでも同じ値になる数を回文数という。 2桁の数の積で表される回文数のうち、最大のものは 9009 = 91 × 99 である。では、3桁の数の積で表される回文数のうち最大のものはいくらになるか。 文字列に変換する方法にしばらく悩んだ 単なるshow…
ubuntuのコマンドラインでgoogleのjavascriptエンジンであるv8を動かしてみよう。 $ sudo aptitude install subversion scons libreadline-dev $ svn co http://v8.googlecode.com/svn/trunk/ v8-read-only $ cd v8-read-only $ CXX=g++-4.1 scons d8 consol…
久しぶりに暇してるのでeulerをやってみることにした。問題は以下 http://projecteuler.net/index.php?section=problems日本語訳も見つけたのでここからコピペしながら進行 http://odz.sakura.ne.jp/projecteuler/index.php?Project%20Euler 問題1 10未満の…