Si vous voulez trouver les plus petits et les plus grands membres de la liste et vous n'êtes pas autorisé à utiliser la norme min et fonctions de bibliothèque max, je peux penser à trois approches
- Ecrire vos propres fonctions min et max (indice: récursion). Appliquez les deux à la liste pour trouver vos deux valeurs. Effectuez la soustraction.
- Ecrivez une fonction combinée (encore une fois, récursive) qui passera une fois dans la liste, en retournant une autre liste de deux membres qui contient les valeurs max et min. Si le premier élément de la liste retournée est le maximum, alors
(apply - (find-min-and-max 3 2 8 7))
, où find-min-et-max est votre fonction, retournera le résultat de la soustraction.
- Utilisez carte.
L'option 1 est moins efficace que l'option 2, mais beaucoup plus simple à écrire. L'option 3 est plus complexe que, mais ne fait ce que vous avez demandé (à savoir comparer un à b, c et d « en même temps »).
Par exemple, si je définissais la fonction suivante:
(define (compare test x l)
(map (lambda (y) (test x y)) l))
puis
(compare < 3 '(1 2 4))
retournerait (#f #f #t)
Comment est-ce utile pour vous? Eh bien, si (compare < x l)
retourne vrai, alors x est plus petit que tous les éléments de l . Si elle retourne tout faux, x est plus grand que tous les éléments de l . Donc, vous pouvez utiliser carte pour construire le code que vous voulez, mais je pense que ce serait moche et pas le moyen le plus efficace pour le faire. Cependant, il fait ce que vous avez spécifiquement demandé (plusieurs comparaisons simultanées d'éléments de liste).
"... vous dire si a est le plus petit nombre ..." Non, ce ne sera pas le cas. +1 pour le min/max, -1 pour la deuxième partie. Hu. – Dirk
@Dirk J'ai édité ma réponse –
Un désordre de ( itsbruce