在linux shell中,如果输入“ls”,我们会得到类似“/ Desktop,/ Music ......”的内容。
很明显,当我们在像haskell这样的动态编程语言的交互式环境中执行一些类似的功能时,环境的输出就是函数的结果。尽管每个显示的结果都是通过“print”隐式转换的,但输出只是函数的结果。
好吧,我只是想知道linux命令的输出是IO动作还是函数结果。
答案 0 :(得分:1)
函数无法启动IO活动吗?
基本的linux / Unix实用程序都是用C语言编写的,并使用广泛的函数库来收集信息。其中一些功能可能会启动磁盘读取和其他I / O.输出通常使用printf
函数生成,并使用适当的格式字符串和参数进行匹配。再次,更多的I / O.
IHTH。
答案 1 :(得分:1)
C语言将程序分解为函数。 ls,find,pwd等实用程序的大多数源代码都是用C语言编写的 - 作为shell的一部分(“bash”或类似的东西) - shell通常也用C语言编写,或者作为单独编写程序
当然,你可以在正确绑定C内核代码的情况下,用lisp,haskell,ocaml或任何其他具有足够功能的语言编写整个Linux实用程序套件(大多数是关于字符串处理的,这是巨大的大多数语言都可以)。
然而,功能语言应该具有“真正的功能”,即功能不应该有任何副作用。根据定义,写入文件,读取文件或打印到屏幕是一种副作用 - 它会影响函数本身之外的事物,结果不是函数返回的结果。所以在这个意义上,C不是函数式编程语言。它具有常常具有副作用的功能。
答案 2 :(得分:0)
不确定如何回答这个问题,为您提供您想知道的详细信息。
当然他们正在执行IO操作(读取文件,写入文件,写入stdout - 这也是一个文件),但他们肯定也在函数中执行工作(格式化输出等等)