Om naar een nieuwe regel te gaan is er de functie newline. Ook
deze functie heeft alleen een side effect.
> (newline)
>
In het volgende voorbeeld zie je wel dat alleen de waarde van de laatste
uitdrukking teruggegeven wordt. (Daarom zal je zoiets in de praktijk ook
niet gebruiken).
> (begin (+ 1 2)
(+ 2 3)
(+ 3 4))
7
Als je meer dan één object (hier: 3 symbolen) intoetst,
krijg je een foutmelding:
> (define input (read))
dit is verkeerd
[VM ERROR encountered!] Variable not defined in current environment
IS
[VM ERROR encountered!] Variable not defined in current environment
VERKEERD
> input
dit
(define voorbeeld-r
; het eigenlijke programma
(lambda ()
(begin
; begin na lambda is niet noodzakelijk
(define input
(read))
; leest van het scherm
(if (einde?
input)
; test of de gebruiker het programma wil beëindigen
(afsluitzin)
; schrijft een of ander afscheidsgroet
(begin
; dit begin is wel noodzakelijk, omdat ...
(produce_output input) ; ... produce_output
en
de recursieve oproep voorbeeld-r ...
(voorbeeld-r))))))
; ... samen de else-uitdrukking vormen
(define startzin
(lambda ()
; hier hebben we de begin weggelaten
(display "Hoi")
(newline)))
(define einde?
(lambda (zin)
; hier hebben we de begin weggelaten
(equal?
'stop zin)))
; dit is maar een simpel voorbeeld
(define afsluitzin
(lambda ()
; hier hebben we de begin weggelaten
(display "Dag")
(newline)))
(define produce_output
(lambda (zin)
; hier hebben we de begin weggelaten
(display "Ga door")
; dit is een wel erg simpel voorbeeld: het programma antwoort altijd hetzelfde
(newline)))
Om van of naar een port te lezen of te schrijven gebruik je gewoon
display,
newline en read, maar geef je ze als extra argument de port
mee:
> (define woord (read mijn-poort))
> woord
...
> (display woord mijn-output-poort)
> (newline mijn-output-poort)
Als je een port niet meer wil gebruiken moet je hem dicht doen:
> (close-input-port mijn-input-poort)
> (close-output-port mijn-output-poort)
(define lees_woorden
(lambda (lijst poort)
(define woord (read poort))
(if (equal? eof woord)
lijst
(lees_woorden (cons woord lijst) poort) ) ) )