2015-09-27 40 views
0

我正在構建一個類似於j/kdb +/tutorialD的關係語言/庫。如何在純F#中實現關係JOIN?

這個想法是,最終用戶將:加載數據(在內存中,從任何地方),執行查詢,做連接,聚合等等。所以,就像LINQ無處不在,as a first-class citizen的語言。

甲關係的組成:

1-與對名稱*類型 2-用的行的列表,其中每一行必須與標題

順應身體的列表的標題所以,就像一張桌子。

事情是這樣的:

type ExprC = 
    | BoolC of bool 
    | DecC of decimal 
    | Str16C of string #And others! 
and 
    ColumnC = {name:string; colType:ExprC} 
and 
    HeaderC = ColumnC array 
and 
    RelC = {header:array<string>; data:array<array<ExprC>>} 

所以,我需要實現完整的關係運算符。投影(選擇)&限制(哪裏)很容易但JOIN看起來棘手。這是因爲我需要遍歷兩個列(並對它們進行排序?)來計算連接,然後刪除用於連接的重複列,然後生成結果。

每一件事情分別是那種容易,但我認爲這是一個很大浪費潛力。我發現聲稱merge-sort-join是要走的路,但不知道如何適用於我正在解釋的這種情況。

我可以改變什麼..目前我唯一的要求是該解決方案不嚴重阻礙全面關係模型的實現和性能「OK」。

回答

0

喬恩斯基特已經使用C#重新實現LINQ到對象,它可以激勵你。以下是兩個序列的JOIN(內部連接)實現的詳細描述:Reimplementing LINQ to Objects: Part 19 – Join

+0

哇... WONDERFULL資源。這需要我很長時間才能消化,但是,男人,一切都在! – mamcx

+0

祝你好運與你的圖書館。如果你將它開放源代碼讓我知道。 –