我不确定这到底有多少属于“编程”而不是“程序语言设计”。但问题是这样的:
说,为了简单起见,我们有两个“特殊”列表/数组/向量/为了简单起见,我们只是称为“端口”,一个称为“端口”,另一个称为“端口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!"]
如果这些结果需要以与上述类似的方式交织在一起,那将是一个错误。