你会如何用 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
)
最佳答案
一般来说,你需要一个不同的函数,
List AddItemToList(List list, Item item);
因为您应该返回一个添加了项目的新列表,而不修改原始列表。这涉及其他问题,例如应该需要垃圾收集器来跟踪您将要创建和丢弃的中间列表。
我不认为 C 是实现函数式编程技术的最佳语言,您必须从头开始构建所有内容。显而易见的理想选择是纯函数式编程语言,或者至少是支持函数式技术的编程语言,例如 C++、C# 或 Python。
也许你想检查这个question .
希望这(以某种方式)有所帮助。
关于c - 使用链表在 C 中进行函数式编程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16854847/