Je bloque sur une traduction Scheme vers Clojure (SICP)

27 views
Skip to first unread message

jba...@gmail.com

unread,
Dec 8, 2016, 3:47:28 AM12/8/16
to clojure-fr
Bonjour,

Je suis actuellement en train de lire le très fameux et très vénérable livre "Structure and Interpretation of Computer Programming" et je n'arrive pas à transcrire en Clojure ce bout de code Scheme, issu du paragraphe "2.1.3 What Is Meant by Data?":

(define (cons x y)
   
(define (dispatch m)
       
(cond ((= m 0) x)
             
((= m 1) y)
       
(else (error "Argument not 0 or 1 -- CONS" m))))
     dispatch
)

(define (car z) (z 0))

(define (cdr z) (z 1))

qui consiste à "simuler" une donnée (ici une liste à deux éléments) sous forme de fonction en redéfinissant "cons", "car" et "cdr".

Auriez-vous une idée ?

Merci d'avance !

Christophe Grand

unread,
Dec 8, 2016, 4:57:17 AM12/8/16
to clojure-fr
Quelque chose comme ça :

(defn fcons [x y] (fn [m] (case m 0 x 1 y)))
(defn fcar [z] (z 0))
(defn fcdr [z] (z 1))

Christophe

--
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes "clojure-fr".
Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, envoyez un e-mail à l'adresse clojure-fr+unsubscribe@googlegroups.com.
Pour obtenir davantage d'options, consultez la page https://groups.google.com/d/optout.



--
On Clojure http://clj-me.cgrand.net/
Clojure Programming http://clojurebook.com
Training, Consulting & Contracting http://lambdanext.eu/

jba...@gmail.com

unread,
Dec 8, 2016, 6:59:51 AM12/8/16
to clojure-fr
MERCI Christophe !

J'ai dû m*rder dans mon expression au niveau des "cond" (comme celle en Scheme). Je vais essayer d'analyser mon erreur.

La vôtre marche nickel.


jba...@gmail.com

unread,
Dec 8, 2016, 7:13:18 AM12/8/16
to clojure-fr
Je confirme: J'avais mal écrit ma clause "cond", tout simplement... (la honte)

(defn fcons
 
"fonction-record"
 
[x y]
 
(fn [m] ( cond (= m 0) x
                 
(= m 1)    y
         
)
 
)
)

marche aussi (en moins concis et donc moins beau ;) )




Reply all
Reply to author
Forward
0 new messages