J'essaie une modification du code de tri sur http://home.adelphi.edu/~siegfried/cs270/270rl10.html où je me sers encore pour la fonction d'insertion:ne peut pas utiliser laisser Racket
(define (mysort alon)
(let insert ((n n) (alon alon))
(cond
[(empty? alon) (cons n empty)]
[else (cond
[(< n (first alon)) (cons n alon)]
[else (cons (first alon)
(insert n (rest alon))])])
(cond
[(empty? alon) empty]
[(cons? alon) (insert (first alon)
(mysort (rest alon)))])))
(mysort (list 1 2 3 4 5 6 2 3 1 4 5 2 10))
Cependant, il ne fonctionne pas au niveau de la variable « let » déclaration:
n: unbound identifier in module in: n
Je vois ici (https://docs.racket-lang.org/reference/let.html) que 'laisser' doit avoir des valeurs initiales des variables. Peut-on utiliser 'let' sans initialiser les variables? Comment le code ci-dessus peut-il être corrigé?
Edit: J'ai essayé d'utiliser lambda, mais il ne fonctionne pas:
(define (mysort4 alon)
(let ([insert4
(lambda (n alon)
(cond
[(empty? alon) (cons n empty)]
[(< n (first alon)) (cons n alon)]
[else (cons (first alon)
(insert4 n (rest alon)))]))])
(cond
[(empty? alon) empty]
[(cons? alon) (insert4 (first alon)
(mysort4 (rest alon)))])))
(mysort4 (list 1 2 3 4 5 6 2 3 1 4 5 2 10))
L'erreur est:
insert4: unbound identifier in module in: insert4
Nommé 'let' sans les valeurs initiales des variables serait juste un lambda. –
Je ne suis pas en mesure d'insérer le mot-clé lambda dans le code ci-dessus. Les deux "(laisser insert (lambda (n alon" et "(laisser insérer lambda (n alon" ne fonctionne pas – rnso
"(let ([insert4 (lambda (n alon) ...]))" ne fonctionne pas non plus – rnso