如何读取 Chez-Scheme 中的一行输入?
How to read a line of input in Chez-Scheme?
我不知道该怎么做。在以前的实现中 read-line
可用,但由于某些原因它不在 Chez 中。
如何只读取一行输入?
我的标准序曲中有 read-line;它以 carriage-return、line-feed 或两者的任一顺序处理行尾:
(define (read-line . port)
(define (eat p c)
(if (and (not (eof-object? (peek-char p)))
(char=? (peek-char p) c))
(read-char p)))
(let ((p (if (null? port) (current-input-port) (car port))))
(let loop ((c (read-char p)) (line '()))
(cond ((eof-object? c) (if (null? line) c (list->string (reverse line))))
((char=? #\newline c) (eat p #\return) (list->string (reverse line)))
((char=? #\return c) (eat p #\newline) (list->string (reverse line)))
(else (loop (read-char p) (cons c line)))))))
Chez Scheme 是 R6RS 的实现。
使用 R6RS get-line
而不是 R7RS read-line
.
我不知道该怎么做。在以前的实现中 read-line
可用,但由于某些原因它不在 Chez 中。
如何只读取一行输入?
我的标准序曲中有 read-line;它以 carriage-return、line-feed 或两者的任一顺序处理行尾:
(define (read-line . port)
(define (eat p c)
(if (and (not (eof-object? (peek-char p)))
(char=? (peek-char p) c))
(read-char p)))
(let ((p (if (null? port) (current-input-port) (car port))))
(let loop ((c (read-char p)) (line '()))
(cond ((eof-object? c) (if (null? line) c (list->string (reverse line))))
((char=? #\newline c) (eat p #\return) (list->string (reverse line)))
((char=? #\return c) (eat p #\newline) (list->string (reverse line)))
(else (loop (read-char p) (cons c line)))))))
Chez Scheme 是 R6RS 的实现。
使用 R6RS get-line
而不是 R7RS read-line
.