2016-07-22 128 views
0

我一直在試圖解決SICP中的this問題。 鏈接也有一個解決方案。 Link to the problem's underlying concept in SICP什麼是C++方案的標記數據的替代方案

這是問題描述。

貪得無厭的企業,公司,是一個高度分散集團 公司由大量位於 世界各地的獨立師的。該公司的計算機設施通過一個巧妙的網絡接口方案相互連接,即 使整個網絡對任何用戶都顯示爲單個計算機。 不滿意的總裁在她第一次嘗試利用網絡從分部文件中提取管理信息的能力 驚慌地發現,雖然所有的分區文件都有 作爲Scheme中的數據結構實現,但是特定數據 使用的結構因部門而異。 部門的一個會議匆忙呼籲尋找一個戰略,以整合 文件,這將滿足總部的需要,同時保留現有的部門的自主權 。

顯示如何使用數據導向的 編程來實現此策略。舉例來說,假設每個部門的人員記錄由一個單一文件組成,其中包含一組以記錄員工姓名爲記錄的記錄 。該組的結構從 師到師。此外,每個員工的記錄本身是一個 集合(分部之間的結構不同),其中包含地址和薪金等標識符下的 信息。 特別是:

a。爲總部實施一個獲取記錄程序,該程序從指定的人事檔案中檢索指定員工的記錄 。 程序應適用於任何部門的文件。解釋應該如何構建各個部門的檔案。特別是,什麼 類型的信息必須提供?

b。爲總部實施一個get-salary程序,該程序返回來自任何部門的 人事檔案中給定員工記錄的 薪資信息。該記錄應該如何結構化才能使 這一操作起作用?

c。爲總部實施查找員工記錄程序。該 應搜索所有部門的檔案,以查找給定 僱員的記錄並返回記錄。假設這個過程的參數爲 參數員工的名字和所有部門文件的列表。 d)。當不滿足新公司時,爲了將新的人事信息納入 中央系統,必須做出什麼樣的變更? ?

該問題的概念圍繞標記數據。 此問題的解決方案顯然使用get和put方法,它們使用通過使用對實現的基礎表。
這個問題在第2章中,作者還明確指出表格將在第3章中介紹。get和put的方法應該假定它們存在[我使用guile scheme來實現腳本]。

說了這些之後,我想知道如何在C++ 1y中使用STL容器和算法實現類似於標記數據的概念。另外,開發一個與底層表相同的類並對其進行操作,以完全適用於C++ 1y中的標記數據。

P.S.代碼不是必需的。用C++ 1y可視化問題的概念,以便我可以嘗試使用C++ 1y的lamda函數來操作數據,以補償Scheme的函數式編程概念。

+0

'std :: map '?那麼,如果數據類型是有限的,'std :: variant'或其他。 (任何和變種都是C++ 17,但可以在C++ 98或更高版本中實現,Boost也有其中一種。) – Yakk

回答

0

在我看來,'標記數據'是一個抽象的概念。你可以選擇任何表示來實現這個抽象。例如,你可以定義你自己的'Put'和'Get'方法。

+0

TaggedData是符號,對不對?它們本身就是一種數據類型。你能詳細說明一下嗎?這是不是很清楚你說什麼。 –