我学习了命令式编程语言,主要是C++和C语言,所以功能方法对我来说是非常新的。当我在写函数/方法之前,我通常采用“增量”方法(可能大多数人都这样做):编写一小部分代码,然后检查结果是否如预期的那样(通常由只是用printf或std :: cout将它们打印到stdout中),改进算法,增强算法,然后检查到目前为止的结果是否如预期的那样(通常只需将它们打印到标准输出或标准输出),精炼...我很少写完整的方法。Haskell诊断输出
基本这个“增量”的方法是有诊断输出(printf的或std :: COUT在我的例子以上)的能力。但是在Haskell中(据我了解截至目前),如果我想 - 比如说 - 使用'putStrLn'将某些内容写入标准输出,我必须更改函数的签名,因为'putStrLn'只返回一个IO Monad包含我想要打印的信息,但不会在调用'putStrLn'时打印它,对吗?所以每次我想使用'putStrLn'进行诊断输出时,我都必须更改当前函数的签名以及所有其他函数的调用方式等。
所以有一种便宜且简单的方法将函数的“局部变量”的值打印到标准输出中?
或者仅仅是这样一个事实:我要求的是一个标志,我不了解Haskell编程的基础部分?
但并不意味着我将有很多功能,因此命名空间将满的功能呢?因为在函数中局部定义许多辅助函数使得它们无法从外部访问,因此很难尝试...另外,为这些函数找到有意义的函数名将更加困难,并且我看到了Haskell中保留函数名称的趋势简短...这一切都让我困惑:)在C++中,例如,尽量保持“本地”和尽可能封装... – Sh4pe 2013-02-10 11:51:57
在Haskell中,我们使用模块和导出列表进行封装。为函数寻找有意义的名字并不比通过一些练习找到局部变量的名字更困难。我认为Haskell的趋势就是保持经常使用的函数名称简短。我经常对模块内部函数有很长的描述性名称,这些名字只用于我目前正在使用的代码中的一个例子'boundedValueBlockTraversal'。我也倾向于完整地记录这些功能,这会产生非常易读且易于维护的代码。 – jix 2013-02-10 19:00:33