R5RS - Как тестировать процедуры, использующие операцию `read` - PullRequest
0 голосов
/ 19 января 2020

Можно ли протестировать процедуры, использующие операцию read?

ex.

(define (foo prompt)
  (display prompt)
  (read))

Я пытался использовать write, но read, кажется, создает блок так что write запускается только после того, как я ввожу что-то вручную

1 Ответ

0 голосов
/ 20 января 2020

Когда вы вызываете внутренний read в своем коде, этот вызов будет читать не со стандартного ввода, а из самого вашего файла, потому что читатель, который преобразует входной файл в список s-exps, будет использовать то же чтение функция. Так что, да, вы можете использовать его, если переопределите, иначе результат будет сложнее предвидеть. Вот пример read.scm:

(define (foo m)
  (display m)
  (read))

(display (foo "input:"))

200

(newline)

Пример использования:

% mit-scheme --silent < read.scm
input:200

Значение 200 будет прочитано вызовом функции, оно не будет возвращено в окончательный список, представляющий код.

Чтобы определить свою собственную read-keyboard функциональность, вы можете взять в качестве модели это .

...