Последняя строка в вашем player1.exe
файле выглядит подозрительно. flush-output
фактически не применяется как функция. Вместо
flush-output (current-output-port)
Вы, вероятно, имеете в виду:
(flush-output (current-output-port))
С точки зрения стиля: функции read
, write
и flush-output
по умолчанию работают на текущих портах ввода и вывода, поэтому вам не нужно их предоставлять. Посмотрите документацию по этим функциям, такую как flush-output
, и вы увидите, что в ней упоминается, что current-output-port
является ее значением по умолчанию.
Так что строка, на которую мы только что посмотрели, может быть записана как:
(flush-output)
Больше проблем: не используйте eq?
для сравнения строк. Вместо этого используйте string=?
. Причина в том, что могут быть две строки, имеющие одинаковое текстовое содержимое, но для которых eq?
все равно сможет различить две. e.g.:
kui $ racket
Welcome to Racket v5.2.1.
> (eq? "a" (string-copy "a"))
#f
> (string=? "a" (string-copy "a"))
#t