Некоторые интерактивные системы, включая Стандарт ML Нью-Джерси и GHC, предлагают интерактивный цикл верхнего уровня, где можно ввести выражения и видеть результаты. Миленькое удобство состоит в том, что результат нового выражения связывается с переменной it
. Вот пример от GHCi:
Prelude> 3 + 5
8
Prelude> it
8
Prelude> 2 * it
16
Prelude> it + 1
17
Я пытаюсь проследить источник этой конвенции. Кто-либо может обеспечить примеры других интерактивных систем, которые использовали подобные конвенции? И дата их, если возможный?
Не REPL, но hypertalk (язык гиперкарты) позволял "это" в некоторых контекстах. Я не уверен в точном случае использования, так как никогда не пользовался hypercard, но, похоже, это похожая идея. Это датируется 1986 годом или около того.
Ruby предоставляет ту же удобную переменную, что и _
:
>> 3 + 5
=> 8
>> _
=> 8
>> 2 * _
=> 16
>> _ + 1
=> 17
Интересно, что глобальная переменная $ _
также доступна: это последний вход, прочитанный из , получает
или строка чтения
.
Многие распространенные лингвистические языки используют '*' для обозначения предыдущих результатов. EG '*' - это последний результат, '**' - результат перед последним и т.д.:
* 5
5
* 6
6
* 7
7
* (+ * ** ***)
18
В Python есть '_', который является последним результатом:
>>> 5
5
>>> _
5
В Erlang есть функция 'v()':
1> 5.
5
2> 6.
6
3> 7.
7
4> v(1) + v(2) + v(3).
18
] Похоже, что первым экземпляром REPL с функцией списка истории был BBN LISP, ок. 1972.
«В BBN-LISP каждый ввод, вводимый пользователем, и значение соответствующей операции автоматически сохраняются АП в глобальной структуре данных, называемой списком истории.«Я не смог найти никакой документации о том, как на самом деле получить доступ к этим значениям, только о том, как повторить предыдущие события с помощью REDO. (См. http://www.softwarepreservation.org/projects/LISP/interlisp/Teitelman-FCJJ1972. pdf )
Я также не смог найти ни одного ключевого слова для доступа к последнему значению истории в его преемнике Interlisp, возможно, из-за отсутствия Google-Fu.