( define ( read-tokens ) ( read-tokens-aux ( read ) ) ) ( define ( read-tokens-aux last-token ) ( if ( eq? last-token '$ ) () ( cons last-token ( read-tokens-aux ( read ) ) ) ) ) (define (concatenation) ( concat (read-tokens))) (define (concat lis) (if (= (length lis) 3) (conc (car lis) (cadr lis) (caddr lis)) (display "Mauvais nombre d'arguments") )) (define (conc chaine1 op chaine2) (cond ((not (string? chaine1)) (display "Le premier argument n'est pas une chaine")) ((not (string? chaine2)) (display "Le deuxieme argument n'est pas une chaine")) ((not (eq? op '+)) (display "le separateur attendu est +")) (else (string-append chaine1 chaine2)) ) )