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

COM を学ぶ(4) : ProgID から CLSID を求める。

COM C

CLSID は GUID の別名として定義されています。 typedef struct _GUID { DWORD Data1; // 4バイト WORD Data2; // 2バイト WORD Data3; // 2バイト BYTE Data4[8]; // 1バイト×8 } GUID; typedef GUID CLSID; typedef GUID IID; ProgID "ADODB.Connection" …

COM を学ぶ(3) : Ruby の invoke メソッドだけでアクセスしてみる。

COMの仕組みを理解しようと Ruby の Win32OLE ドキュメント(win32ole: Ruby Standard Library Documentation)を追ってます。 前回の「COM を理解する(2):CでADODB.Connectionに接続する」にあるテーブルを表現した構造体に invoke がありますが、Ruby の …

COM を学ぶ(2):CでADODB.Connectionに接続する

COM C

GHCはCのコンパイルも出来ます。C言語でCOMクライアントを参考にして、SQL server, MS-Access にアクセスする ADODBConnection に接続してみました。 #include "stdio.h" #include "windows.h" #include "objbase.h" typedef struct tagMyVTable { /* VTable…

COM を学ぶ(1)

参考にしたサイト COMの基礎 〜 HSPの裏技?? 番外編 〜 HSPからのCOM操作 C言語でCOMクライアント 温COM知新 (おんこむちしん) ProgID とは--> "ADODB.Connection","ADODB.Recordset" : CLSIDを参照する文字 CLSID とは--> COMコンポーネントの識別子(GUID…

Segmentation fault/access violation in generated code

SQLserverにADO 接続をして検索するアプリを作ろうとしているのだけど、Segmentation fault/access violation in generated code が起きてしまう。 1回目はたいてい大丈夫で、2回は問題が発生しないこともあるけれど、3回、4回となるとSegmentation faul…

「Real World Haskell」読書メモ 4.関数プログラミング foldl を foldr で理解する

Real World Haskell 4.関数プログラミング 4.6 ループをどのように考えるか -- file: ch04/Fold.hs myFoldl :: (a -> b -> a) -> a -> [b] -> a myFoldl f z xs = foldr step id xs z where step x g a = g (f a x) import Debug.Trace myFoldl f z xs = tra…

「Real World Haskell」読書メモ 4.関数プログラミング 4.6 ループをどのように考えるか

Real World Haskell 4.関数プログラミング 4.6 ループをどのように考えるか 末尾再帰が何がそんなに騒ぐほどのことなのか 関数型言語はループがないので再帰関数を使用しますが、再帰適用ごとにメモリを割り当てるのは明らかに不利。 関数型言語では末尾再帰…

不完全なパターンについての警告(-fwarn-incomplete-patterns)

不完全なパターンについての警告 GHC に不完全なパターンがあった場合警告する -fwarn-incomplete-patterns というオプションがあります。 【例】 test [] = "" test (a:b:c:rest) = show a ++ show b ++ show c ++ test rest -fwarn-incomplete-patterns オ…

「Real World Haskell」読書メモ 3. 型定義、ストリーミング関数 再帰型

Real World Haskell 3. 型定義、ストリーミング関数 再帰型 再帰型の例にある List 型を使ってリストっぽいことをやってみた。 data List a = Cons a (List a) | Nil deriving (Eq, Ord, Show) cons a b = Cons a b car (Cons x _ ) = x cdr (Cons _ xs) = x…

Data.DateTime を使ってみる

Data.DateTime : Utilities to make Data.Time.* easier to use. CalendarTimeは計算は分り易いけれどSQL文字列への変換がやりにくい。 Data.DateTime というのがあったので使ってみる。 -- インストール ~$ cabal update ~$ cabal install datetime fromClo…

Haskell で日付計算 (CalendarTime)

old-time-1.0.0.4: Time library > :m + System.Time > t <- getClockTime > t Wed May 5 11:55:18 東京 (標準時) 2010 > :t t t :: ClockTime > :i ClockTime data ClockTime = TOD Integer Integer -- Defined in System.Time instance Eq ClockTime -- De…

and と or の評価を短絡する仕組み

and リストの途中に False の要素が現れたり、or リストを評価している途中にTrue が現れればリストを最後まで評価しなくても結果が確定します。このような仕組みを短絡と言います。 import Debug.Trace myFoldl f z0 xs0 = lgo z0 xs0 where lgo z [] = tra…

遅延評価(無限リストと take)

無限リストを作成し、その結果から take 関数により取得しているのではない。 import Debug.Trace take' n _ | n <= 0 = trace ("[]") [] take' _ [] = trace ("[]") [] take' n (x:xs) = trace (show x ++ " : take' ("++show n++"-1) xs") (x : take' (n-1…

「エラトステネスの篩」など。

フィボナッチ数列:次の数字は前の数字とその前の2つを足した数字。 ghci> let fib=0:1:[a+b|(a,b)<-zip fib (tail fib)] ghci> take 20 $ fib [0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,1597,2584,4181] 素数:1と自分自身以外のどんな自然数に…

遅延評価と正格評価

正格評価の言語 Ruby と比較してみる。 ~$ irb irb(main):001:0> def trace(str) irb(main):002:1> puts str irb(main):003:1> return str irb(main):004:1> end => nil irb(main):005:0> trace "hello" hello => "hello" # a に配列を代入した時点で trace …

interact 関数

interact ってどういう関数なのか調べてみた。 base-4.2.0.1:Prelude -- | The 'interact' function takes a function of type @String->String@ -- as its argument. The entire input from the standard input device is -- passed to this function as it…