これが「プログラム言語設計」ではなく「プログラミング」にどの程度当てはまるかは正確にはわかりません。しかし、問題はこれです:
簡単にするために、2 つの「特別な」リスト/配列/ベクトル/単に「ポート」と呼んでいるものは何でも、1 つは呼び出されstdIn
、もう1 つはstdOut
. これらはそれぞれ概念的に表します
- プログラムの実行中にプログラムに与えられたすべてのユーザー入力
- プログラムの実行中に端末に書き込まれたすべての出力
Haskell にインスパイアされた疑似コードでは、この完全に宣言的なプログラムを作成できるはずです。
let stdOut = ["please input a number",
"and please input another number",
"The product of both numbers is: " ++ stdIn[0] * stdIn[1]]
どちらが期待どおりで、2 つの番号を要求し、製品を印刷します。トリックは、stdOut がプログラムの完了時に端末に書き込まれた文字列のリストを表し、stdIn が入力文字列のリストを表すことです。タイプエラーと、新しい行が入力された後に次の行のみを印刷するための安全策が必要であるという事実は、簡単にするためにここでは残しておきますが、おそらくそれを解決するのは簡単です.
では、このアイデアを実装する前に、私が見落としていた落とし穴はありますか? 私は似たような構造がすでに存在していることを認識していないので、私が見落としていた明らかな落とし穴があることを考慮しないのはナイーブです.
そうでなければ、私はもちろんそれを知っています:
let stdOut = [stdIn[50],"Hello, World!"]
これらの結果を上記と同様の方法で織り合わせる必要がある場合は、エラーになります。