Я не уверен, насколько точно это относится к «программированию», а не к «проектированию языка программирования». Но проблема в следующем:
Скажем, ради простоты у нас есть два «специальных» списка / массива / вектора / что бы мы просто не называли «портами» для простоты, один называется 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!"]
Было бы ошибкой, если эти результаты должны быть переплетены таким же образом, как указано выше.