Voici une définition de abs
:
(define (abs n)
((if (< n 0) - +) n))
Administré un nombre négatif le résultat de l'évaluation -
est retourné autre +
donc si vous deviez passer -5
il devient (- -5)
et dans le cas 5
est adopté, il devient (+ 5)
. Les deux évaluent à 5
. Voyez-vous que j'utilise le retour d'une expression en tant que fonction? Voilà ce que les parenthèses signifient .. Dans un langage C comme je aurais pu faire quelque chose comme (n < 0 ? sub : add)(0, n)
Dans votre cond
en faisant abstraction des parenthèses qui entourent chaque terme vous avez doubles entre parenthèses plusieurs endroits:
((display "Time") (newline))
((display n) (newline) (countdown (- n 1)))
Les deux supposent que la fonction d'affichage renvoie une fonction que l'on peut appliquer. Ce n'est pas le cas et il échouera en vous disant que ce n'est pas une fonction.
Si vous cherchez à regrouper des commandes, par exemple {}
en langage C, alors vous recherchez le formulaire spécial begin
. par exemple.(begin 1 2 3) ; ==> 3
cond
a explicitement begin
dans chacun de ses termes, donc si vous vouliez juste pour chaque partie a évalué la solution ressemble à ceci:
(define (countdown n)
(cond ((zero? n) (display "Time") (newline))
(else (display n) (newline) (countdown (- n 1)))))
Une autre façon de formater est la suivante:
(define (countdown n)
(cond
((zero? n)
(display "Time") (newline))
(else
(display n)
(newline)
(countdown (- n 1)))))
Les parenthèses de notification sont alignées avec le même niveau afin que vous sachiez quand le prochain terme commence. Il vous aide à lire le code puisque votre mise en forme dans la question ne donne aucune indication. Obtenez un éditeur approprié pour faire votre codage.