2008/11/23

【JavaScript】インタラクティブなJavaScript実行【これは便利】

JavaScriptのシェル改良版
http://muumoo.jp/news/2008/06/21/0jssh.html

[javascript]InteractiveJS その2
http://d.hatena.ne.jp/nak2k/20050911/p1

【scheme】【javascript】Hello world その2

schemeでHello world!!
参考はこちら
http://www.shido.info/lisp/scheme4.html

(define hello
  (lambda (name) 
    (string-append "Hello " name "!")))
(hello "valvallow")

出力結果
"Hello valvallow!"

(cons "Hello world" '())


出力結果
("Hello world")

(define sum3
  (lambda (a b c)
    (+ a b c)))
(sum3 1 2 3)


出力結果
6


最後の関数はJavaScriptで書くとこんな感じ?
あえてグローバル空間汚すと
sum3 = function (a, b, c) { return a+b+c; };
sum3(1, 2, 3)
//出力結果 6


定義してそのまま実行して、グローバル空間汚さないんだったら
(function () { return function (a,b,c) { return a+b+c; }; })()(1,2,3)
//出力結果 6


ってか。

【scheme】Hello world

schemeでHello world!!


参考はこちら
http://www.shido.info/lisp/scheme4.html


schemeは関数型言語
最近流行(?)のHaskellは純粋関数型言語らしいが、schemeはどうやら非純粋関数型言語らしい。

(define hello "Hello world") 
(define sayHello
    (lambda () hello)) 

hello
(sayHello)


実行結果
"Hello world"
"Hello world"


正直まだコメントの書き方も、変数や関数の名前付けの傾向もわかりませんw


(define hello "Hello world") ⇒ defineは引数を2つ取る組み込み関数
(define sayHello ⇒ 1つ目の引数がグローバル変数の名前
(lambda () hello)) ⇒ 2つ目の引数が変数の中身
⇒ ここでは1行目で定義したhelloグローバル変数の中身を出力するようにした
hello ⇒ 1行目で定義した変数の中身が出力される
(sayHello) ⇒ 2行目で定義した関数が実行された結果が出力される


関数型言語は、「さんしょうとうかせい」と「ふくさようがない」ということで、バグの少ない良いプログラムを書くことができるらしい。
C#のラムダはこういった関数型言語から影響を受けたらしい。
Rubyは、「MatzLisp」とか「Algolの仮面をかぶったLisp」とか呼ばれてるらしいね。
らしいばかりでスマソ。

【scheme】【JavaScript】関数定義(可変長引数)(C#でいうparams)

schemeでも関数の定義。
可変長引数について。

C#のparamsキーワード付き引数的な、JavaScriptのargumentsプロパティ的な。

そうそう、コメントの仕方もわかった♪
「;」で始まる行はコメントになるっぽい。

参考はこちら
http://www.shido.info/lisp/scheme4.html
(define three-args+
  (lambda (a b c . d)
    (list a b c d)))

(three-args+ 1 2 3)
;; => (1 2 3 ())

(three-args+ 1 2 3 4 5 6 7 8 9 10)
;; => (1 2 3 (4 5 6 7 8 9 10))

(define params+
  (lambda (a . p)
    (list a p)))

(params+ 1 2 4 5)
;; => (1 (2 4 5))

でも、引数が0個もしくは1個もしくは複数個とかできんのかなぁー。
JavaScriptだとこんな感じか?

(function () { return function () { return arguments; }; })()(1,2,3,4,5,6,7)
それとも?
(function () { return function () { var ret = []; for (var i = 0; i < arguments.length; i++)ret.push(arguments[i]); return ret; }; })()(1,2,3,4,5,6,7)

The Little Schemer, 4th Edition

2008/11/22

【scheme】Scheme(Lisp)はじめました。

Lispの方言(らしい)schemeをはじめました。
括弧だらけでおもしろいですw
ハッカーと画家」の影響です。


今度、参考書として「計算機プログラムの構造と解釈」でも買おうと思う。
訳が酷すぎるという噂なので、一応立ち読んでから決める。


開発環境は「DrScheme」というIDE(?)です。
ステップ実行でデバッグでっきます。
また、日本語にも対応しています。


詳しくは以下を参照
・インストール
もうひとつの Scheme 入門
http://www.shido.info/lisp/idx_scm.html


・日本語化
scm-startup
http://www.math.kyoto-u.ac.jp/~susumu/lecture/kjsen07/ex/scm-startup/index.html


↓ちなみにこんな感じ。↓
(cons "Sum of" (cons (cons 1 (cons 2 (cons 3 (cons 4 '())))) (cons "is" (cons 10 '()))))
出力結果 ⇒ ("Sum of" (1 2 3 4) "is" 10)


そういや、こないだRubyもはじめたところですw
「初めてのRuby」読みながら♪
この本は噂どおり良書っぽいです。
毎日昼休みにやってます♪

2008/10/09

【C#】XML(デ)シリアライズ(XmlSerializer、SoapFormatter)

System.Xml.Serialization
⇒ XmlSerializer
System.Runtime.Serialization.Formatters.Soap (同名のdllを参照)
⇒ SoapFormatter
C#プログラミングレッスン:XmlSerializer
http://archive.mag2.com/0000141533/20070405071000000.html?start=20
C#プログラミングレッスン:シリアル化(SOAP形式)
http://www.melma.com/backnumber_120830_3590692/
SoapFormatter クラス
http://msdn.microsoft.com/ja-jp/library/system.runtime.serialization.formatters.soap.soapformatter(VS.71).aspx
MSDN:基本的なシリアル化
http://msdn.microsoft.com/ja-jp/library/4abbf6k0(VS.80).aspx

2008/06/25

【XML】【C#】【SQL】DBとXML

[XML]
連載 .NETで簡単XML
http://www.atmarkit.co.jp/fdotnet/easyxml/index/

XMLテクニック集
http://www.atmarkit.co.jp/fxml/tecs/index/tech01.html

連載 SEのためのXML Schema入門(1)
簡単なXML Schemaから始めよう
http://www.atmarkit.co.jp/fxml/rensai2/schema01/schema01.html

XML & SOA
http://www.atmarkit.co.jp/fxml/

標準XML完全解説〈上〉 (単行本)
http://www.amazon.co.jp/%E6%A8%99%E6%BA%96XML%E5%AE%8C%E5%85%A8%E8%A7%A3%E8%AA%AC%E3%80%88%E4%B8%8A%E3%80%89-%E4%B8%AD%E5%B1%B1-%E5%B9%B9%E6%95%8F/dp/4774111864

[データベース]
SQLで木と階層構造のデータを扱う(1)――入れ子集合モデル
http://www.geocities.jp/mickindex/database/db_tree_ns.html

SQLで木と階層構造のデータを扱う(2)――経路列挙モデル
http://www.geocities.jp/mickindex/database/db_tree_pe.html

データベースの設計についての質問です。
顧客リストの標準的な正規化モデルというのは存在しますでしょうか?
http://q.hatena.ne.jp/1100249030

XMLの論考: 第8回
XMLを階層モデル、リレーショナル・モデル、オブジェクト指向モデルに適応させる

http://www.ibm.com/developerworks/jp/xml/library/x-matters8-index/

入れ子になったテーブル
http://technet.microsoft.com/ja-jp/library/ms175659.aspx

階層構造、入れ子構造、ツリー構造のデータベースでの表現方法
http://hassylin.nowa.jp/entry/3a21342417

2008/02/27

【SQL】最近便利だと思ったSQL



--数値を文字列に変換
SELECT
STR(1)
--結果:' 1'
--指定文字を指定回数繰り返す
SELECT
REPLICATE('0', 10)
--結果:'0000000000'
--指定文字列を指定した文字列に置き換える
SELECT
REPLACE( '00010000010000100', '0', '')
--結果:'111'
 --右端から文字列を切り取る
SELECT
RIGHT('0000000123', 3)
--結果:'123'
--変数を宣言する
DECLARE @Number INT
SET @Number = 123
--0埋めを行う(例、10桁)
SELECT
RIGHT(REPLICATE('0', 10) + REPLACE(STR(@Number), ' ', ''), 10)
--結果: '0000000123'
--DateTime型をInt型へ変換する('2008/01/01 00:00:00' → 20080101)
DECLARE @Date DATETIME
SET @Date = '2008/01/01 00:00:00'
SELECT
CAST(CONVERT(VARCHAR, @Date, 112) AS INT)
--結果: 20080101
--'2008/01/01 00:00:00'から月末の日付を取得
SELECT
DATEADD(DAYOFYEAR, -1, DATEADD(MONTH, 1, @Date) )
--結果:'2008-01-31 00:00:00.000'
--現在の時刻を取得
SELECT
GETDATE ()
--結果:'2008-02-25 13:01:24.903'
--任意の日付から月末日を取得する
SELECT
DATEADD(DAYOFYEAR, -1, DATEADD(MONTH, 1, CONVERT(DATETIME, CONVERT(VARCHAR(6), GETDATE(), 112) + '01' + ' 00:00:00')))
--結果:'2008-02-29 00:00:00.000'
 --int型の任意の日付から月末を取得する
SELECT
CAST(CONVERT(VARCHAR, DATEADD(DAYOFYEAR, -1, DATEADD(MONTH, 1, CONVERT(DATETIME, CONVERT(VARCHAR(6), REPLACE(STR(20080215), ' ', '')) + '01 00:00:00', 112))), 112) AS INT)
--結果:20080229
--int型の日付をDatetime型に変換する
SELECT
CONVERT(DATETIME, CONVERT(VARCHAR(8), 20090220))
--2009-02-20 00:00:00.000
--年齢計算
SELECT
FLOOR((CAST(CONVERT(VARCHAR(8), GETDATE(), 112) AS INT) - 19840110)/10000) AS AGE
--25
--条件分岐
--詳しくは「CASE式のススメ」
--
http://www.geocities.jp/mickindex/database/db_case.html
SELECT
Tbl.ID
,CASE COALESCE(Tbl.DELFLG, 0)
  WHEN 1 THEN '●'
  ELSE NULL
END AS [削除済]
FROM
(
  SELECT 1 AS ID, NULL AS DELFLG
  UNION
  SELECT 2 AS ID, 1 AS DELFLG
  UNION
  SELECT 3 AS ID, 0 AS DELFLG
) AS Tbl
ORDER BY
Tbl.ID
--ID    削除済
--1    NULL
--2    ●
--3    NULL
追記:
少し見やすくしました。
ちなみに環境はMSSQLです。MySQL等では動かないものが多い。