R5RS - Как тестировать процедуры, использующие операцию чтения

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

ex.

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

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


person Alter    schedule 19.01.2020    source источник
comment
Вы можете определить свою собственную процедуру (read) для возврата любого желаемого значения. например (define (read) "Hello!").   -  person Flux    schedule 20.01.2020


Ответы (1)


Когда вы вызываете внутренний 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 функции, вы можете взять в качестве образца это.

person alinsoar    schedule 20.01.2020
comment
Просто примечание: я помечаю это как ответ, потому что это работает с той информацией, которую я дал в вопросе, но это не работает в моей конкретной настройке (доктор Рэкет - R5RS) - person Alter; 22.01.2020
comment
@Alter Racket поддерживает несколько языков. Если вы установите его на r5rs, он должен работать. - person alinsoar; 22.01.2020
comment
возможно, я запутался, но кажется, что read с ракеткой и r5rs, похоже, используют стандартный ввод (т.е. он дает мне поле ввода текста) - person Alter; 22.01.2020
comment
Я не могу помочь, потому что я использовал рэкет только для ограниченных целей, в основном сосредоточившись на других аспектах r6rs, а не на интерфейсе ввода-вывода. - person alinsoar; 22.01.2020
comment
@Alter Какую ОС вы используете? Вы используете Racket r5rs через DrRacket или через командную строку? - person Flux; 29.01.2020