LINUX.ORG.RU

вопрос по чтению из файла

 ,


1

2

Почему в схеме такие сложности чтобы просто прочитать файл? Вот, например, в Newlisp просто пишешь

(print (read-file "./file"))
Вот для сравнения, в r5rs, по-моему, самый легкий путь
(call-with-input-file "./file"
  (lambda (input-port)
    (let loop ((x (read-char input-port)))
      (if (not (eof-object? x))
          (begin
            (display x)
            (loop (read-char input-port)))))))
И это еще не самый плохой вариант, что предлагают схемы. Зачем так все усложняют?



Последнее исправление: super-hack-new-user (всего исправлений: 1)

И это еще не самый плохой вариант, что предлагают схемы. Зачем так все усложняют?

Вероятно, что это побочный эффект минималистского интерпретатора и стандарта.

Deleted
()
Ответ на: комментарий от super-hack-new-user

А почему там вообще читается и пишется через эти порты?

Потому же, почему и в C++. Чтобы для функции-обработчика можно было передать просто порт, а не набор функция для чтения байта, чтения символа, записи байта, ...

Иначе для функции, которая должна читать XML придётся делать версии «читать XML из файла», «читать XML из строки», «читать XML из сокета», ... Ну или вместо порта использовать строку, что не очень хорошо: в твоём примере Scheme vs NewLisp для большого файла Scheme будет просто выводить по одному байта, а NewLisp сначала прочитает весь файл в память, а потом выведет. Если файл парус сотен гигабайт, то это неприемлемо.

monk ★★★★★
()
Ответ на: комментарий от super-hack-new-user

Потому что так можно читать не только файлы на диске, но и сеть и другие сущности?

PolarFox ★★★★★
()

Я забан этого господина.

grouzen ★★
()

Потому что схемка язык больше академический, стремящийся к некоторой чистоте, а ньюлисп больше нацелен на практику и более толерантен к разным костылям

buddhist ★★★★★
()
Ответ на: комментарий от monk

лямбдой же не обязательно оборачивать

(call-with-input-file "./file" get-string-all)

qweqwe
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.