or1ko's diary

日々を書きます

Haskell

Outlook の Web APIを呼び出す例

Outlook の Web APIを呼び出すサンプルコードを書いた。起動して http://localhost:8080/ にアクセスすると、 OAuth2のためにOutlookに転送され、許可すると、 http://localhost:8080に戻ってきて、 メッセージのタイトル一覧を表示する。Outlook の Web API…

24

言語処理100本ノック 2015 24. ファイル参照の抽出 記事から参照されているメディアファイルをすべて抜き出せ. メディアファイルというのが何を指しているのかわからなかったが、 ファイル参照の抽出というタイトルから、File:を抜き出すことにした。 中身…

Windows版HaskellでUTF8のファイル読み書き

Haskell Platform 7.10.2-aをインストールした際に、日本語(utf8)の扱いがわからなくなってしまって、ずっとほっといたのだが、ふと思い出して調べてみた。 紆余曲折したが、ポイントとしては下記の2点。 Handleにutf8を指定 ファイルの読み書きなどのデフ…

20

言語処理100本ノック 2015 Wikipedia記事のJSONファイルを読み込み,「イギリス」に関する記事本文を表示せよ.問題21-29では,ここで抽出した記事本文に対して実行せよ. 20.hs {-# LANGUAGE OverloadedStrings, DeriveGeneric #-} import Data.Aeson as A …

JSONの読み込み方法

言語処理100本ノック 2015言語処理100本ノックの第3章に入るにあたり、JSON形式の読み取り方法について調べた。 標準のライブラリにはないため、別途パッケージが必要で、Googleで検索した限りでは、下記の2つの名前が上がった。aeson: Fast JSON parsing an…

19

言語処理100本ノック 2015 19. 各行の1コラム目の文字列の出現頻度を求め,出現頻度の高い順に並べる 各行の1列目の文字列の出現頻度を求め,その高い順に並べて表示せよ.確認にはcut, uniq, sortコマンドを用いよ. 19.hs import System.Environment impor…

17

言語処理100本ノック 2015 17. 1列目の文字列の異なり 1列目の文字列の種類(異なる文字列の集合)を求めよ.確認にはsort, uniqコマンドを用いよ. > Get-Content -Encoding utf8 .\hightemp.txt | ConvertFrom-Csv -Header a -Delimiter `t | % { $_.a } …

16

言語処理100本ノック 2015 16. ファイルをN分割する 自然数Nをコマンドライン引数などの手段で受け取り,入力のファイルを行単位でN分割せよ.同様の処理をsplitコマンドで実現せよ. 16.hs import System.Environment import Control.Monad main = do args …

15

言語処理100本ノック 2015 15. 末尾のN行を出力 自然数Nをコマンドライン引数などの手段で受け取り,入力のうち末尾のN行だけを表示せよ.確認にはtailコマンドを用いよ. > tail -n 10 15.hs import System.Environment main = do num <- getArgs >>= retur…

14

言語処理100本ノック 2015 14. 先頭からN行を出力 自然数Nをコマンドライン引数などの手段で受け取り,入力のうち先頭のN行だけを表示せよ.確認にはheadコマンドを用いよ. >head -n 10 14.hs import System.Environment main = do num <- getArgs >>= retu…

13

言語処理100本ノック 2015 13. col1.txtとcol2.txtをマージ 12で作ったcol1.txtとcol2.txtを結合し,元のファイルの1列目と2列目をタブ区切りで並べたテキストファイルを作成せよ.確認にはpasteコマンドを用いよ. pasteコマンドなかったため未実施。たぶん…

12

言語処理100本ノック 2015 12. 1列目をcol1.txtに,2列目をcol2.txtに保存 各行の1列目だけを抜き出したものをcol1.txtに,2列目だけを抜き出したものをcol2.txtとしてファイルに保存せよ.確認にはcutコマンドを用いよ. > cut -f 1 hightemp.txt > col1.tx…

11

11. タブをスペースに置換 タブ1文字につきスペース1文字に置換せよ.確認にはsedコマンド,trコマンド,もしくはexpandコマンドを用いよ. >sed "s/\t/ /g" hightemp.txt >tr "\t" " " < hightemp.txt expandはなかったためやめる。11.hs import System.IO.…

10

言語処理100本ノック 20152章はUnixのコマンドの練習のようだけれども、 Haskellを書きたいので、同様のプログラムも作成していく。と思っていたら、よく読んでみたら、プログラム書く演習だった。 10. 行数のカウント 行数をカウントせよ.確認にはwcコマン…

09

言語処理100本ノック 2015 09. Typoglycemia スペースで区切られた単語列に対して,各単語の先頭と末尾の文字は残し,それ以外の文字の順序をランダムに並び替えるプログラムを作成せよ.ただし,長さが4以下の単語は並び替えないこととする.適当な英語の…

08

言語処理100本ノック 2015 08. 暗号文 与えられた文字列の各文字を,以下の仕様で変換する関数cipherを実装せよ.英小文字ならば(219 - 文字コード)の文字に置換 その他の文字はそのまま出力 この関数を用い,英語のメッセージを暗号化・復号化せよ. import…

07

言語処理100本ノック 2015 07. テンプレートによる文生成 引数x, y, zを受け取り「x時のyはz」という文字列を返す関数を実装せよ.さらに,x=12, y="気温", z=22.4として,実行結果を確認せよ. 07.hs import Text.Printf main = putStrLn $ f 12 "気温" 22.…

04-06

言語処理100本ノック 2015 04. 元素記号 "Hi He Lied Because Boron Could Not Oxidize Fluorine. New Nations Might Also Sign Peace Security Clause. Arthur King Can."という文を単語に分解し,1, 5, 6, 7, 8, 9, 15, 16, 19番目の単語は先頭の1文字,そ…

01-03

言語処理100本ノック 2015Haskellで何か書きたくなったので、上記のサイトの問題を解いていくことにした。 00. 文字列の逆順 文字列"stressed"の文字を逆に(末尾から先頭に向かって)並べた文字列を得よ. Prelude> Data.List.reverse "stressed" "desserts…

単純なParsec利用例2

5文字の入力がある場合、OKと表示し、 そうでない場合に、NGと表示する例 module Main where import System.IO import Text.ParserCombinators.Parsec main = getContents >>= return . ngok . parseSimple >>= print parseSimple input = parse simple "(un…

単純なParsec利用例

標準入力から"abc"と入力されたかをチェックするParsecの例 プログラム module Main where import System.IO import Text.ParserCombinators.Parsec main = getContents >>= return . parseSimple >>= print parseSimple input = parse simple "(unknown)" i…

基本認証があるHTTPS GETでコンテンツを取得する例

Network.HTTPでHTTPSをサポートしていないとのことであったので、 http-conduitをパッケージを使用http-conduitでは特になにもせずに、HTTPSが利用可能(サンプルの転記) import Network.HTTP.Conduit main = withSocketsDo $ do request' <- parseUrl url >>…

URIクエリの構築例(UTF8)

コード import Network.URI (escapeURIString, isAllowedInURI) host = "http://www.yahoo.co.jp/test" params = [("query","テスト"), ("key", "キー")] main = putStr $ buildURI host params buildURI host params = host ++ "?" ++ (join "&" $ map aQue…

HTTP GETでコンテンツを取得する例

import Network.URI import Network.HTTP url = "http://www.yahoo.co.jp/" main = simpleHTTP (getRequest url) >>= getResponseBody

Parsecの練習 〜 hrefの値を取り出す 〜

Parsecを勉強したので、 htmlのアンカータグのhref属性の値を取り出す処理を書いた。標準入力から読み込んだテキストから、 href="aaaa"といったところから、 "aaaa"をとりだす。 import System.IO (getContents) import Text.ParserCombinators.Parsec impo…

Haskellのuniq

Haskellのuniqっぽいのをを忘れてしまうので備忘録。Data.Listのnub関数 Prelude>:m Data.List Prelude Data.List>nub $ [1,3,2,3,3] [1,3,2]一番最初に表れたものだけを保持して、リストを作成する。

295

久しぶりに見かけたのでチャレンジ Server error 一昔前は、すごい勢いで投稿されていたけど、 最近は寂しい限りみたいだ。 パスワードとかが分からなくてログインできず...再発行も面倒で...orz import Data.Char (isDigit) import Data.List (find, groupB…

RegisterHotKeyを呼び出す

RegisterHotKey 関数 WindowsのRegisterHotKeyを呼び出したくて、RWHを読んで、 hsc2hsを使って、モジュールを作成してみた。以下のようにして、hscファイルをhsに変換して使う $ hsc2hs HotKey.hsc $ ghc --make HotKey.hs $ runghc .\TestHotKey.hs 設定し…

モナド

モナドか、 いつか、あの力の秘密、 解き明かしてみたいな。

Project Euler 8

import Control.Monad (liftM) import Data.Char (digitToInt) main = liftM (maximum . map product . sub5 . concat . lines) getContents sub5 s = [map digitToInt $ take 5 $ drop n s | (n,_) <- zip [0..length s - 5] s]

ここ最近

ここ最近、いかの訳を読んでる The Typeclassopediaを訳しました, The Typeclassopedia - #3(2009-10-20) 毎日、少しづつ進めて、やっと、Categoryにきた。憧れのArrowまで、あとちょっと。

メモリが足らない

もっかいビルドしたら、いけた。

cabal-installをインストール

ref:404 Not Found xmonad使うならxmobarだろという無益な発想から,xmobarをインストールしようとした.しかし,上記のページにあるrunhaskell Setup.lhs configureをしたところ,いろいろなパッケージを要求された.足らないパッケージを一つ一つインスト…

思考の流れについて

思考の流れ ○をして、〜して、〜するRubyでは puts ARGF.each.take(n) Haskellでは main do cs <- getContents putStr (unlines (take n lines cs)) 人間がどう感じるか 人間は進化する 新たな知識 慣れ 最適化 ref:まつもとゆきひろが語る「ビューティフ…

:(コロン)演算子の定義と~(チルダ)演算子の話

今日、:(コロン)演算子がPreludeにあるかと思って探したけれどなかったので、調べた。 コロンそのもの ":" は Haskell のリスト構築子専用に予約され ていることに注意すること Haskell 98 Lexical Structure :(コロン)って予約されてたんだ。$(ドル)や.(ピ…

ブロックソートをHaskellで書いてみた(2回目)

ref:ブロックソートをHaskellで書いてみた - ori’s diary ref:Re: ブロックソートを Haskell で書いてみた - まめめも ku-ma-meさんの参考に少し直した。 import Data.List (sort, tails, inits, elemIndex, sortBy) import Data.Maybe (fromJust) main :: I…

ブロックソートをHaskellで書いてみた

ref: wikipedia:ブロックソート via:Haskell で Suffix Array - まめめも Suffix Arrayを構築するプログラムが非常に簡単に書けるので、ブロックソートも簡単に書けるのではないかと思い、やってみた。 計算量とメモリの空間効率は一切考えない。 import Dat…

utf8の標準入力を受け取る方法

ref:System.IO.UTF8 getContentsをPreludeからSystem.IO.UTF8に切り替える。 import Prelude hiding (getContents) import System.IO.UTF8 (getContents)

floorとsqrtにはまった話

型クラスを理解してなくてはまってしまった. nums n = [1..floor $ sqrt ( n / 2 )] 上記の関数に型をつけようとして,まず初めに nums :: Integral a => a -> [a] と書いた.今まで nums n = [1..n] に型をつける場合,Integralを指定してたからですが,や…

Project Euler - Problem 24

ref Problem 24 - Project Euler ref Problem 24 - PukiWiki Problem 24 は結構、手間取った。総当たり戦で解こうと頑張ったのが敗因。だいたいの計算量を考えながらプログラム作らないといけないとつくづく感じた。r とか t とか変な関数名をつけてしまった…

エラトステネスの篩(ふるい)2

ref:エラトステネスの篩(ふるい) - ori’s diary take 10 $ era [] [2..] といったように書くにはどうしたらいいのだろうか. と思っていたので,書き直してみた. import Data.List (findIndex) plist :: [Int] plist = era [2..] era :: [Int] -> [Int] era…

エラトステネスの篩(ふるい)

wikipedia:エラトステネスの篩 を実装してみた. main = print $ era [] $ step1 100 step1 n = [2..n] step2 ps ns = ps ++ [head ns] step3 ps ns = filter (\n -> (mod n (last ps)) /= 0) ns era [] ns = era (step2 [] ns) $ step3 (step2 [] ns) ns er…

3298 Antimonotonicity

ちょっと早いですが今週のPKUです。 import java.util.*; public class Main{ static{ Scanner s=new Scanner(System.in); s.next(); for(int n,x,y,c;(n=s.nextInt())>0;System.out.println(c)) for(x=c=1;n-->0;x=y) c=c%2!=1^x>(y=s.nextInt())?c+1:c; } …

Quick Sort

"あなたが一番好きなアルゴリズムを教えてください。"なる人力はてなの質問があったけれど、 haskellのQuick Sortに感動したのを思い出した。下の奴。 quicksort :: (Ord a) => [a] -> [a] quicksort [] = [] quicksort (x:xs) = quicksort [y | y <- xs, y …

合計を求めるプログラム

標準入力の各行にある数の合計を求めるプログラムを書いた。 main = do cs <- getContents print . sum . map read $ lines cs 以前はread関数を知らなかったので、ord関数とリスト操作を頑張ってやっていた。 readってすばらしい。けど、実数は読めないみた…