Scheme 在球拍/方案中考虑具有副作用的功能的惯例是什么?

Scheme 在球拍/方案中考虑具有副作用的功能的惯例是什么?,scheme,racket,convention,Scheme,Racket,Convention,显然,在Racket/Scheme中,在执行变异的函数名后面加一个感叹号是一种惯例。例如,在球拍中,set,框集,向量集,等等。某些功能有副作用,如打印,但由于这些副作用是“无害的”,我理解为什么它们通常不附带感叹号 然而,这项公约被任意违反。例如,它们可以清楚地执行变异,但它们的名字后面没有“变异标记”。这在某种程度上是合理的,因为它们是通道,显然是基于突变的,所以“!”是多余的 然而,这并不是所有事情的正当理由。球拍的提供和功能,都有明显的标记,但并没有!这仅仅是一个孤立的违反公约的行为,还

显然,在Racket/Scheme中,在执行变异的函数名后面加一个感叹号是一种惯例。例如,在球拍中,
set
框集
向量集,等等。某些功能有副作用,如打印,但由于这些副作用是“无害的”,我理解为什么它们通常不附带感叹号

然而,这项公约被任意违反。例如,它们可以清楚地执行变异,但它们的名字后面没有“变异标记”。这在某种程度上是合理的,因为它们是通道,显然是基于突变的,所以“!”是多余的

然而,这并不是所有事情的正当理由。球拍的提供和功能,都有明显的标记,但并没有!这仅仅是一个孤立的违反公约的行为,还是有一些规则

我问这个问题主要是为了确定我应该如何在自己的代码中命名函数。我什么时候应该使用感叹号,什么时候不应该?我承认这只是一个惯例,而不是一个规则,可能会有点不一致,但我还是想知道最佳实践是什么。

我不认为#!racket有自己的命名约定,但根据您的阅读:

引起副作用的过程和语法形式的名称 以感叹号(!)结尾。这些包括一套!和 向量集!。在技术上执行输入或输出的过程会导致 副作用,但它们的名字是这条规则的例外

在程序中,它说的是
过程表示“严重副作用”。依我看,这意味着副作用是程序的主角,如
set car
设置
while
read
返回一个值,该值可能是read的主要功能