gpt4 book ai didi

functional-programming - 这种声明式 I/O 方法有什么问题(如果有的话)

转载 作者:行者123 更新时间:2023-12-03 08:14:07 24 4
gpt4 key购买 nike

我不确定这到底有多少属于“编程”而不是“程序语言设计”。但问题是:

说,为了简单起见,我们有两个“特殊”列表/数组/向量/为简单起见我们称之为“端口”的任何东西,一个称为 stdIn,另一个称为 stdOut。这些分别在概念上代表

  • 在程序运行期间提供给程序的所有用户输入
  • 程序运行期间写入终端的所有输出

在 Haskell 启发的伪代码中,应该可以创建这个完全声明的程序:

 let stdOut =   ["please input a number", 
"and please input another number",
"The product of both numbers is: " ++ stdIn[0] * stdIn[1]]

这会达到预期效果,询问两个数字,然后打印他们的产品。诀窍在于 stdOut 代表在程序完成时写入终端的字符串列表,而 stdIn 代表输入字符串列表。为简单起见,键入错误以及需要一些保护措施以仅在输入新行后才打印下一行这一事实被搁置在这里,解决这个问题可能很容易。

那么,在我着手实现这个想法之前,是否有任何我忽略的陷阱?我不知道已经存在类似的结构,所以不考虑它有一个明显的陷阱我忽略了是天真的。

否则,我当然知道:

 let stdOut =   [stdIn[50],"Hello, World!"]

如果这些结果需要以与上述类似的方式交织在一起,将会出错。

最佳答案

Haskell 的早期版本使用了类似的方法,除了 stdin 和 stdout channel 的元素不是字符串而是通用 IO“ Action ”——事实上,输入和输出被概括为“响应”和“请求” '.只要两个 channel 都是惰性的(即它们实际上是“迭代器”或“枚举器”),运行时就可以简单地遍历请求 channel ,对每个请求采取行动并将适当的响应附加到响应 channel 上。不幸的是,这个系统很难用,所以它被废弃了,取而代之的是 monadic IO。请参阅这些论文:

  • Hudak, P. 和 Sundaresh, R. 关于纯功能 I/O 系统的表现力。技术。代表 YALEU/DCS/RR-665,耶鲁大学计算机科学系,1989 年 3 月。
  • Peyton Jones, S. 处理尴尬小队:单子(monad)输入/输出、并发、异常和 Haskell 中的外语调用。软件构建工程理论,2002,pp. 47--96。

关于functional-programming - 这种声明式 I/O 方法有什么问题(如果有的话),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2970674/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com