#lang scheme
;;; Si (current-directory) no es #<path:/Users/username/Mis documentos/Scheme>
(define trabajo-dir "/Volumes/abenitez/ZETA/")

;;; Establecemos el nombre del fichero
(define nombre-fichero "prueba_3.txt")

;;; Construimos su path

(define fichero1 (build-path trabajo-dir nombre-fichero))

fichero1

;;; fichero1 es un path

(path? fichero1)

;;; como open-...put-file requiere un string

(set! fichero1 (path->string fichero1))

fichero1

;;; la variable out-port-1 tiene como valor el puerto
;;; que devuelve open-output-file.
(define out-port-1 (open-output-file fichero1 #:exists 'append))

;;; La información que escribiremos en fichero1

(define s "Si se ejecuta el código anterior ...")

;;;;
(define write-caracteres
  (lambda (s puerto)
    (unless (string=? s "")
      (begin
        (write-char (string-ref s 0) puerto)
        (write-caracteres 
         (substring s 1 (string-length s)) puerto))) ))
        
(define display-escribir
  (lambda (puerto . objeto)
    (let go ((obj objeto))
      (if (null? obj)
          (close-output-port puerto)
          (begin
            (write-caracteres (car obj) puerto)
            (newline puerto)
            (go (cdr obj))) ) )))

(display-escribir out-port-1 s)

;;; Para ver los resultados.
;;; la variable in-port1 tiene como valor el puerto
;;; que devuelve open-input-file.
(define in-port1 (open-input-file fichero1))

;;;;
(define read-char-mientras-no-eof
  (lambda (in-port)
    (let go ((item (read-char in-port)))
      (if (eof-object? item)
          (close-input-port in-port)
          (begin
            (display item)
            (go (read-char in-port))) ) ) ))

(read-char-mientras-no-eof in-port1)

