纯函数式Racket

3

所有有副作用的Racket过程都是什么? 我正在尝试创建一个尽可能少有副作用的程序。

因此,我会做类似以下的事情:

#lang racket/base
(provide (except-out (all-from-out racket/base) set! …more here…))

除了set!,还有哪些应该排除的内容?所有不纯的函数是否有完整的列表可用?

另外,程序也使用了 #lang racket/gui(根据我所知,这主要是不纯的)。所以可能有点棘手...

谢谢。


你能详细说明一下为什么吗?也就是说,你想做什么?因为“不可变”是相对于某个上下文的。相对于CPU和RAM状态,没有任何程序是“不可变”的。稍微缓和一些,一个函数可能会表现得很纯粹,但它的实现可能会使用记忆化——这是否符合你的目的?我不确定你关心的上下文是什么。无论如何,GUI通常使用有状态的OOP处理,例如Racket。 - Greg Hendershott
我想避免使用副作用,这样我的函数就能表现出纯净的行为,因为我相信这样做会更容易测试和理解我的程序。如果'racket/gui'需要有状态的设计,那么我该怎么减轻这种需求呢? - user3623657
1个回答

7
在Racket中没有预先构建的非纯函数列表。如果你避免使用任何带有!的名称,那么你会接近纯函数。
请注意,您可以使用可变数据结构,并仍然以纯函数方式进行编程 - 只要您不改变它们。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接