c - 使用链表在 C 中进行函数式编程

标签 c functional-programming

你会如何用 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/

相关文章:

scala - 如何自动生成一个函数以将密封的案例类系列与隐式实例相匹配?

c++ - 将 stdout、stderr、cout、cerr 重定向到文件和屏幕

c - 为什么在跨步预取时循环顺序很重要?

c++ - 如何使用嵌套在没有名称的结构中的c union

haskell - 有没有办法避免在插入时复制二叉树的整个搜索路径?

programming-languages - Haskell 中的 "class"和 OO 语言中的 "abstract class"有什么区别?

functional-programming - 如何缩短这段 OCaml 代码?

IAR EWARM 中的条件链接

c 编程 : Conversion of < ? :将条件键入简单的 if else

python - 装饰器 : TypeError: "got multiple values for keyword argument <variable name>" on function call