你如何在C中使用功能纯的链表?链接列表是我应该做的吗?我正在尝试拥有一个对象列表,但我想不出如何在不修改外部状态的情况下将一个项目添加到列表中。
我基本上想要这个:
void AddItemToList(Item item);
能够从任何地方进行调用,而无需调用者担心要添加的列表。
现在我只有:
void AddTypeToList(entityType_t *type, entityType_t *listHead)
{
type->next = listHead;
listHead = type;
}
void RegisterEntityType(entityType_t *type)
{
AddTypeToList(type, typeList);
}
但这显然不起作用(或者是吗?)因为RegisterEntityType
正在修改typeList
。 (这是全球entityType_t
)
答案 0 :(得分:1)
你需要一个不同的功能,一般来说,
List AddItemToList(List list, Item item);
因为您应该返回添加了项目的新列表,而不修改原始列表。这涉及其他问题,例如,为了跟踪您要创建和丢弃的中间列表,应该需要垃圾收集器。
我不认为C是实现函数式编程技术的最佳语言,你必须从头开始构建所有东西。显而易见的理想选择是纯函数式编程语言,或者至少是支持函数技术的编程语言,例如C ++,C#或Python。
也许您想查看question。
希望这(以某种方式)有所帮助。