История языка: происхождение переменной 'it' в цикле read-eval-print? - PullRequest
8 голосов
/ 25 июля 2010

Некоторые интерактивные системы, включая Standard ML of New Jersey и GHC, предлагают интерактивный цикл верхнего уровня, где вы можете набирать выражения и видеть результаты. Приятное небольшое удобство в том, что результат самого последнего выражения связан с переменной it. Вот пример из GHCi:

Prelude> 3 + 5
8
Prelude> it
8
Prelude> 2 * it
16
Prelude> it + 1
17

Я пытаюсь проследить происхождение этого соглашения. Может ли кто-нибудь привести примеры других интерактивных систем, которые использовали аналогичные соглашения? И назначить им дату, если это возможно?

Ответы [ 4 ]

1 голос
/ 25 июля 2010

Многие распространенные списки используют '*' для обозначения предыдущих результатов.Например, «*» - это последний результат, «**» - результат перед последним и т. Д .:

* 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
1 голос
/ 25 июля 2010

Не REPL, но HyperTalk (язык гиперкарты) допускал "это" в некоторых контекстах. Я не уверен в точном случае использования, поскольку я никогда не использовал гиперкарту, но, похоже, это похожая идея. Это датируется 1986 или около того.

1 голос
/ 25 июля 2010

Ruby предоставляет ту же переменную удобства, что и _:

>> 3 + 5
=> 8
>> _
=> 8
>> 2 * _
=> 16
>> _ + 1
=> 17

Интересно, что глобальная переменная $_ также доступна: это последний вход, считанный из gets или readline.

0 голосов
/ 27 июля 2010

Кажется, что первым экземпляром REPL с функциональностью списка истории был BBN LISP, ок.1972.

"В BBN-LISP каждый ввод, введенный пользователем, и значение соответствующей операции автоматически сохраняются в глобальной структуре данных, называемой списком истории."Я не смог найти никакой документации о том, как на самом деле получить доступ к этим значениям, только о том, как повторить предыдущие события, используя REDO.(См. http://www.softwarepreservation.org/projects/LISP/interlisp/Teitelman-FCJJ1972.pdf)

. Также я не смог найти ни одного ключевого слова для доступа к последнему значению истории в его преемнике Interlisp, возможно, из-за отсутствия Google-Fu.

...