2016-07-22 93 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是符号,对不对?它们本身就是一种数据类型。你能详细说明一下吗?这是不是很清楚你说什么。 –