2007-01-01から1ヶ月間の記事一覧

any関数。

(a -> Bool) -> [a] -> Bool [a]の要素に対して(a -> Bool)を適用し、1つでもTrueの場合、Trueを返す。 main = do print $ any anyTest [2, 3, 4, 5, 1] print $ any anyTest [1, 2, 1] print $ any anyTest [2, 4, 5] anyTest :: Int -> Bool anyTest n = i…

コマンドライン引数を読み込む。

import System main = do args <- getArgs print $ args コンパイルし、コマンドライン引数に『a b c』と渡して実行。 結果。 ["a","b","c"] スペースで区切られた配列として返されているようだ。

import宣言。

様々な関数、変数が定義されているモジュールを使用する場合、import宣言を使用するとそのモジュールが使用可能となる。 import System 名前空間みたいなものか。 全ての関数、変数はいずれかのモジュールに属しており、モジュールを定義していない場合、そ…

where節。

where節以降で関数を定義すると、その直前で定義した関数からのみ使える関数が定義関数を定義、変数を束縛できる。 main = do print $ whereTest 1 whereTest :: Int -> Int whereTest n = plus 5 where plus :: Int -> Int plus num = n + num この場合、pl…

haskell-modeのインデント。

main = do cs -> getContents■ この状態でreturnキーを押すと main = do cs -> getContents ■ カーソルは先頭に来る。 Tabを押すと main = do cs -> getContents ■ getContentsのところに移動。 その後、ちまちまとcsのところに移動させていたけど、もう一度…

head関数。

リストの先頭の要素を返す。 head [1, 2, 3] head "abc" 結果。 1 'a' 空リストに適用するとエラー発生。 Exception: Prelude.head: empty list

tail関数。

リストの先頭以降の要素を返す。 tail [1, 2, 3] tail "abc" tail [1] 結果。 [2, 3] "bc" [] tail [1] の結果が [] となるのは、リストの末尾には常に空リストという特別な要素があるため。

filter関数。

filter :: (a -> Bool) -> [a] -> [a] 第2引数[a]の要素で(a -> Bool)がTrueの要素のみ集めてリストで返す。 main = print $ filter filterTest ["abc", "de", "f", "gh"] filterTest :: String -> Bool filterTest cs = if length cs == 2 then True else F…

map関数の動作。

main = print $ map square [1, 2, 3] square :: Int -> Int square n = n * n 結果。 [1,4,9] map関数の定義はこんな感じ。 map :: (a -> b) -> [a] -> [b] map f [] = [] map f (x:xs) = f x : map f xs 始めの定義は空のリストにマッチし、空のリストを返…

コメントの書き方。

--コメント {- コメント -} --は行末まで。 {--}は囲まれている範囲。

concatMap関数。

concat関数とmap関数を一つにまとめた関数。 main = print $ concatMap concatMapTest [1, 2, 3] concatMapTest :: Int -> [Int] concatMapTest n = [n * n] 結果。 [1,4,9]concat関数とmap関数をまとめているということは、 main = print $ concat $ map co…

replicate関数。

第2引数の値を第1引数で指定された数分だけ含むリストを返す。 main = do putStrLn $ replicate 5 'a' print $ replicate 5 1 print $ replicate 0 'a' print $ replicate (-1) 'a' 結果。 aaaaa [1,1,1,1,1] "" ""

concat関数。

リストの要素を連結しリストを返す。 concat ["a", "b", "c"] concat [[1,2], [3], [4,5,6]] concat [[[1,2,3]], [[4]]] それぞれの結果。 "abc" [1,2,3,4,5,6] [[1,2,3],[4]] リストは1つしか減らない点に注意。 一重のリストに対して適用すると concat [1,…

パターンマッチ。

main = putStrLn $ patternTest 2 patternTest :: Int -> String patternTest 1 = "one" patternTest n = "other" 結果。 other 値のパターンによって実行される関数が変化する。 patternTest :: Int -> String patternTest n = "other" patternTest 1 = "on…

高階関数。

高階関数、英語だとhigher order fuction。またよくわからない用語が出てきた。 本にあるサンプルを書いて実行してみる。 main = print $ map square [2, 3, 4] square :: Int -> Int square n = n * n 結果。 [4, 9, 16] map関数の定義は、 map :: (a -> b)…

if文。

標準入力にタブが含まれていたら@に書き換えて出力。本にあるサンプル。 main = do cs <- getContents putStr $ expand cs expand :: String -> String expand cs = map translate cs translate :: Char -> Char translate c = if c == '\t' then '@' else c…

型を宣言する。

Haskellは関数の引数、戻り値の型を明示的にしなくても、型推論という機能のため動作するけど、明示的にすることもできる。 lastNList :: Int -> String -> String lastNList n cs = unlines $ takeList n $ lines cs 書き方は、 関数名 :: 第1引数の型 第2…

標準入力の最初の10行を出力する。

main = do cs <- getContents putStr $ firstNLines 10 cs firstNLines n cs = unlines $ take n $ lines cs 始めての関数定義。firstNLines。 自分で関数を定義するには、 関数名 引数1 引数2… = 実際の処理 とする。 ここでは標準入力から得た文字列csをリ…

標準入力の終わりから10行を出力する。

main = do cs <- getContents putStr $ lastNLines 10 cs lastNLines n cs = unlines $ takeNList n $ lines cs takeNList n ss = reverse $ take n $ reverse ss reverse関数はリストの要素を逆順にする。とりあえずの関数いろいろメモ。 関数名 機能 lines…

WindowsにHaskellの処理系をインストール。

ここからインストーラをダウンロードして実行、環境変数PATHにコンパイラなどがインストールされたディレクトリを追加(現バージョンはC:\ghc\ghc-6.6\bin) 使い方はid:t-imaizumi:20060927:1159361266と同じ。

標準入力の行数を数える。

Haskellの勉強を再開。以前、勉強していたところをまったく覚えていない。ここに記録しておいてよかった。 main = do cs <- getContents print $ length $ lines cs lines関数が文字列を行単位でリストに分割し、length関数はリストの要素数を返す。 $は式を…

screenのよく使うコマンドメモ。

すぐに忘れるのでこちらを参考にメモメモ。 キー 機能 c 新しいウィンドウを作成 n 次のウィンドウへ移動 p 前のウィンドウへ移動 0〜9 指定した番号のウィンドウへ移動 [ コピーモードに移行 A ウィンドウタイトルを変更 コマンド文字は~/.screenrsに escap…

Railsレシピ。

目次買い。Railsレシピ作者: Chad Fowler,長瀬嘉秀,永田渉,株式会社テクノロジックアート出版社/メーカー: オライリー・ジャパン発売日: 2006/12/19メディア: 大型本購入: 2人 クリック: 37回この商品を含むブログ (37件) を見る

SSHサーバを立ち上げる。

MacでSSHサーバを立ち上げるには、『システム環境設定』→『共有』にある『リモートログイン』にチェックを付け、『開始』ボタンを押すだけ。 このMacに接続するにはターミナルから、 ssh username@hostname と実行。 パスワードを尋ねられるので、usernameの…

ついにきたけど悔しい。

ついに来たiPhone。 iPhone - Apple アップル iPhone発表 - Engadget 日本版 アップルiPhone:写真ギャラリー - Engadget 日本版 iPhoneを動かしているムービーや写真いろいろ - GIGAZINE Macworld 2007「iPhone」:カメラと動画の機能もついている | ギズモー…

LineTracer

黒い線に沿って走る。 http://youtube.com/watch?v=1mcJ-_HTUqk 黒い線の検知には光センサーを使用しています。 プログラミングは入門LEGO MINDSTORMS NXT レゴブロックで作る動くロボット作者: 大庭慎一郎出版社/メーカー: ソフトバンククリエイティブ発売…

タッチセンサーを使ってみた。

タッチセンサーを取り付け、前進した後、何かにぶつかったら後退するっていうのを、マニュアルに従って作ってみた。 前方にあるぶら下げられた棒の根本付近にあるオレンジ色の物体がタッチセンター。何かにぶつかったり、押されたりすると反応する。 プログ…

始めて作ってみた。

マインドストームNXTの箱に入っている『Start Here』というスタートキットを組み立て、早速、プログラムを書いてみた。 プログラムはこんな感じ。 アイコンを組み合わせて作ります。 ここでは音を出す→前進→停止→回転という動作をさせています。 http://yout…