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

関数

function add (arg1, arg2) { var result = arg1 + arg2; return result; } add(2, 5); // => 7

変数のスコープ

変数を定義するときには,とにかく var をつけておくのが良さそうだ。 関数の外で定義した変数はグローバル 関数の中で var を使って定義した変数はその関数内のローカル 関数の中で var を使わずに定義した変数はグローバル 関数の中で var を使った場合: …

arguments

関数定義に仮引数を書かなくても,arguments という配列に格納される。引数の数が不定の場合に便利。 function hello() { for (var i=0; i<arguments.length; i++){ document.write("Hello, ", arguments[i], ".<br>"); } return i; } hello("Andy", "Bill", "Charlie");</arguments.length;>

再帰呼び出し

function fact(n) { if (n < 0) return null; if (n > 0) { return (n * fact(n-1)); } else { return 1; } }

無名関数

名前を指定しないで関数を定義すると無名関数になる。変数に代入する場合: var f1 = function(arg1, arg2) { return arg1 * arg2; } f1(3,2); // => 6 直接使う場合: var a = new Array(3, 2, -6, 8, -4); a.sort(function (a,b) {return a - b;}); docume…

if

var val1 = 5; var val2 = 4; if (val1 < val2) result = val2; else result = val1; document.write(result); 実行するステートメントが複数なら { } で囲む。 条件演算子もある。 val1 < val2 ? val2 : val1;

for

var sum = 0; var i; for (i=1; i<=10; i++) { sum += 1; } document.write(sum, "<br>");

for 〜 in

var animals = Array("dog", "cat", "elephant"); // 配列 for (x in animals) { document.write(x, "<br>"); }

while

var i = 0; while (i < 10) { document.write(i++, "<br>"); } ループの停止は break,中断(スキップ)は continue。 var i = 0; while (true) { i++; if (i % 2 == 0) continue; if (i >= 10) break; document.write(i++, "<br>"); }

try 〜 catch

例外処理。 try { var today = Date(); today.set_month(3); // no such method. } catch (e) { document.write(e); // => [object Error] } 例外を発生させるには throw かな。

配列

生成 Array コンストラクタを利用する方法。引数に配列のサイズを指定できるけど,必要なら勝手に大きくなってくれる。 var a1 = new Array(); a1[0] = "dog"; a1[1] = "cat"; a1[2] = "elephant"; コンストラクタに値を直接渡す方法。 var a2 = new Array("…

連想配列

Array の添字に整数(インデックス)じゃなくて文字列(キー)を使うと連想配列になる。 var pets = new Array(); pets["Andy"] = "dog"; pets["Bill"] = "cat"; pets["Charlie"] = "elephant"; for (name in pets) { document.write(name, ": ", pets[name]…

オブジェクト

JavaScript のオブジェクトは Ruby でいうクラス インスタンスの生成 today = new Data(); // new コンストラクタ; メソッド呼び出し today.getDay(); // インスタンス名.メソッド名(); インスタンスメソッドとクラスメソッドがある。 インスタンス名.プロパ…

変数

宣言しなくても使えるけど,明示的に宣言するには: var v1; var v2, v3, v4; var v5 = 10; // 同時に初期化 数値型,文字列型,ブーリアン型,オブジェクト型 etc. リファレンス型とプリミティブ型 変数名は,アルファベットか _ で始まり,2文字目以降には…

リテラル

整数(10進数,8進数,16進数) 10 // 10進数 012 // 8進数 0x0a // 16進数 浮動小数点 3.14 1.3e3 .3 文字列 "abc" 'def' ブーリアン true false null エスケープシーケンス

予約語

break else new var case finally return void chatch for switch while continue function this with default if throw delete in try do instanceof tpeof 将来のために予約されている語もある: abstract enum int short boolean export interface static…

演算子

当たり前のものは省略。 インクリメント(++)/デクリメント(--)。前置と後置。 論理演算子: !/&&/||。not/and/or はない。 ビット演算子: &(論理積)/|(論理和)/^(排他的論理和) シフト演算子: >(右算術シフト)/>>>(右論理シフト)。…

'===' と '=='

'===' は型も含めて同一でなければ true にならない。 '==' は型が違っても構わない。たとえば,数値の 10 と文字列の "10" が true になる。 var n = 10; var s = "10"; with(document) { write("n = ", n, " ; type: ", typeof n, "<br>") write("s = ", s, " …

故あって JavaScript に手を出す

基本事項。 大文字と小文字を区別 ステートメントの終わりにはセミコロン; // 行末までコメント /* 複数行のコメント */ スクリプトは script タグで囲む。 JavaScript を認識できないブラウザのために, で囲む(HTMLのコメント扱い)。 <script language="javascript" type="text/javascript"> …

文字列を空白で区切る

テキストファイルから入力を受け付ける時にはよく使う。あとはカンマ区切りなんかも。 import Data.Char splitBy :: (a -> Bool) -> [a] -> [[a]] splitBy p [] = [] splitBy p xs = a : (splitBy p $ dropWhile p $ b) where (a, b) = break p xs splitBySp…

リストによる正方行列(つづき)

cf. 今日の一行 - リストによる正方行列処理週をまたいでしまった。解答例もでてるけど。 問題3。これも内包表記で。 boxing :: [[a]] -> [[a]] boxing m = [[m!!x!!y| x <- [0..l1], y <- [0..l1], x`div`l2 == i, y`div`l2 == j] | i <- [0..l3], j < - […

パターンの回転

パソコン甲子園というのを見つけた。 プログラミング部門の問題が公開されてるので(↓)ちょっとやってみよう。 http://www.pref.fukushima.jp/pc-concours/common/2006honsen.pdf正方行列つながりってことで問題01。 8文字×8行のパターンを右回りに90度、18…

内包表記

こういうのもできるのか。 Prelude> [x| x <- [0..3], y <- [0..3]] [0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3] Prelude> [y| x <- [0..3], y <- [0..3]] [0,1,2,3,0,1,2,3,0,1,2,3,0,1,2,3]

リストによる正方行列

cf. 今日の一行 - リストによる正方行列処理問題1。 matrix n = [[x+(n^2*y)| x <- [1..n^2]] | y <- [0..n^2-1]] *Main> matrix 2 [[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16]] *Main> matrix 3 [[1,2,3,4,5,6,7,8,9],[10,11,12,13,14,15,16,17,18],…

クラスはよくてもモジュールは?

いままで気にしたことなんて無かったけど……cf. Matzにっき - jijixi's diary - Ruby の文法的欠陥 cf. じじぃの日記、ツッコミ可 - Ruby の文法的欠陥 jijixiさんのいう”欠陥”(というと言いすぎのような気もする,といっているけど)というのは 『新しいク…

ファイル入力か標準入力

引数が与えられたらそれをファイル名と見なしてファイルを読み込み,与えられなければ標準入力から読み込む。いわゆるフィルタとしても働くプログラム。こんな感じでいいか? module Main (main) where import System main :: IO () main = do args <- getAr…

loop の列挙

cf. 今日の一行 - loopの列挙 trail はすでにたどったノードのリスト p と次にたどるノードの候補 q を受け取って,全ての経路を列挙する。「次のノード」がスタートと同じならそこでそのループは終わり。違うなら再帰的にノードをたどる。 各ノードは比較さ…

文字列の中央詰めを length を使わずに短く書けるだろうか?

via 毎日Haskell - 2006-12-28 文字列の左詰、右詰 cf. desumasuの日記 - Rubyの文字列操作関数をHaskellで定義する length を使わずに書けたけど,短いとは言い難い。 ljust(左詰)と rjust(右詰)が定義されてるとして center :: Int -> String -> Strin…

lighttpd (for Windows) に触ってみた(2)

昨日(id:takatoh:20070111:lighttpd) のつづき。 ファイルのリスト( mod_dirlisting ) URL がディレクトリを指して,かつインデックスファイルが見つからない場合に,ディレクトリ内容のリストを表示する機能。mod_dirlisting モジュールは server.modul…

lighttpd (for Windows) に触ってみた

ので,メモ。cf. http://www.lighttpd.net/ (公式サイト) cf. ぱるも日記 - Windows で lighttpd を使う ダウンロード ↓ダウンロードはここから。バージョンは 1.4.11。 http://blogs.windowsnetworking.com/wnadmin/2006/09/22/lighttpd-web-server/公式…