-1

在 linux shell 中,如果我们输入“ls”,我们会得到类似“/Desktop,/Music...”的信息。

很明显,当我们在一些动态编程语言如haskell的交互环境中执行一些类似的函数时,环境的输出是函数的结果。尽管每个显示的结果都由“打印”隐式转换,但输出曾经是函数的结果。

好吧,我只想知道linux命令的输出是IO动作还是函数的结果。

4

3 回答 3

1

函数不能启动 IO 活动吗?

基本的 linux/Unix 实用程序都是用 C 语言编写的,并使用广泛的函数库来收集信息。其中一些函数可能会启动磁盘读取和其他 I/O。输出通常使用printf函数生成,并带有适当的格式字符串和要匹配的参数。同样,更多的 I/O。

IHTH。

于 2012-12-26T16:44:21.460 回答
1

C 语言将程序分解为函数。ls、find、pwd 等实用程序的大多数源代码都是用 C 编写的——作为 shell 的一部分(“bash”或类似的)——shell 通常也是用 C 编写的,或者作为单独的程序。

当然,如果对 C 内核代码进行了正确的绑定,您可以用 lisp、haskell、ocaml 或任何其他具有足够功能的语言编写整个 Linux 实用程序套件(其中大部分是关于字符串处理,绝大多数语言可以做)。

但是,函数式语言应该具有“真正的函数”,也就是说,函数不应该有任何副作用。根据定义,写入文件、读取文件或打印到屏幕是一种副作用——它会影响函数本身之外的东西,结果不是函数返回的结果。所以从这个意义上说,C 不是一种函数式编程语言。它具有经常具有副作用的功能。

于 2012-12-26T17:04:29.180 回答
0

不知道如何回答这个问题给你你想知道的细节。

当然,他们正在执行 IO 操作(读取文件、写入文件、写入标准输出——这也是一个文件),但他们当然也在函数中执行工作(格式化输出等)

于 2012-12-26T16:41:50.643 回答