Envoyé par
LLB
En Haskell/Caml/F#, il y a la fonction "partition" qui fait ça très bien. Il n'y a pas de telle fonction avec Scheme ?
Sinon, l'approche récursive doit être plus simple à comprendre que le foldl, je pense.
Je ne crois pas qu'il y ait une telle fonction dans R5RS, ensuite, ça doit dépendre des Scheme. D'un autre côté, le but est sans doute de la recoder de toute façon.
En Haskell, sans utiliser partition, ça donnerait simplement :
infsup e = foldr (\x ~(infs, sups)->if x < e then (e:infs,sups) else (infs, e:sups)) ([],[])
(la définition de partition dans le Prelude est pratiquement identique à ça remarque).
Effectivement une simple récursion pourrait être plus facile à comprendre pour qui n'est pas accoutumé aux fold :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| (define (part e L)
(if (empty? L)
'(() ())
(let* ([a (car L)]
[L* (part e (cdr L))]
[infs (car L*)]
[sups (cadr L*)]
)
(if (< a e)
(list (cons a infs) sups)
(list infs (cons a sups))
)
)
)
) |
(Je n'ai pas fait beaucoup de Scheme, y a sûrement moyen d'améliorer)
--
Jedaï
Partager