2017-06-05 3 views
0

Quelqu'un pourrait-il clarifier pourquoi la procédure renvoie 22? il est clair que cette déclaration n'est pas écrite correctement mais de toute façon pourquoi renvoie-t-elle 22?expression conditionnelle, sa syntaxe et évaluation

merci d'avance.

(define (proc x)  
     (cond (= x 22)  
      (display 3)  
      (display 4)  
    ) 
)  
(proc 3) 
+2

Dans la première clause de cond, '' = 'est pas # f' (il est un opérateur primitif), il est considéré comme vrai,' # t', et alors "x" et "22" sont évalués en séquence, et le résultat final est "22". – Renzo

Répondre

2

Vous avez oublié quelques parenthèses. Dans ce code:

(define (proc x) 
    (cond (= x 22) 
     (display 3) 
     (display 4))) 

Vous testez si la procédure est =true - qui est, parce que dans le schéma tout est truthy, sauf #f, qui est false. Et étant donné que = est true, la dernière valeur correspondant à cette condition est renvoyée, dans ce cas: 22. La syntaxe correcte pour cond est la suivante:

(define (proc x) 
    (cond ((= x 22) 
     (display 3) 
     (display 4)) 
     (else 'error))) 

(proc 22) 
=> 34 
(proc 3) 
=> 'error