CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

Besoin d'aide Lisp

_Marluxia-xv3_
_Marluxia-xv3_
Niveau 7
18 janvier 2010 à 21:01:47

Bonsoir,

J'ai un probleme avec une fonction en lisp je voudrais qui calcul le nombre d'element entre deux element d'une meme liste, j'ai deja defini une fonction qui me donne le nombre d'element dans une liste mais je voudrais qu'il me le fassent pour les element entre deux element.

Voici la fonction qui donne le nombre d'element d'une liste

(defun longueur (l)
(if (equal l nil)
0
(+ 1 (longueur (cdr l)))))

dnob700
dnob700
Niveau 10
18 janvier 2010 à 22:13:13

Et bien, je te conseille d'écrire une fonction qui prend la liste en question, l'élément de début de ta sous liste et l'élément de fin et aussi un accumulateur.

Lorsque l'utilisateur appel ta fonction, l'accumulateur doit être à '-1' par exemple (ou alors il y a une fonction auxiliaire qui le fait), puis lorsque l'élément de début de la sous liste est appelé l'appel récursif de la fonction est fait avec l'accumulateur à 0. Ensuite tu boucle jusqu'à l'élément de fin en augmentant l'accumulateur et tu renvoie celui-ci lorsque tu as trouvé l'élément de fin. Par contre, tu n'incrémente l'accumulateur que lorsqu'il est plus grand que -1.

Et en prime, c'est récursif terminal. Sinon, tu peut le faire de la fin vers le début, avec le même genre d'algo que ce que tu fait pour longueur.

_Marluxia-xv3_
_Marluxia-xv3_
Niveau 7
19 janvier 2010 à 01:22:54

je sait que j'en demande trop mais tu pourrait pas la faire stp parce que je suis vraiment naze en lisp, en faite c'est que j'arrive a retranscrire les idée en lisp

dnob700
dnob700
Niveau 10
19 janvier 2010 à 17:13:19

non, parce que je ne connais pas le lisp et surtout parce que je ne suis pas là pour faire tes devoir. Mais tout l'algo est là. Transcrit le tel que tu peut (si tu as pu écrire la fonction ci-dessus, tu devrais y arriver, il faut comparer la tête de ta liste à tes deux paramètres et faire des appels récursifs en conséquence). Par contre, une fois que c'est fait, si tu as des problèmes, tu peut les poser et on pourra t'aider (malgré que la lecture du lisp ne viennent que second dans le degré d'horreur derrière mathematica).

Aldebran
Aldebran
Niveau 10
20 janvier 2010 à 16:50:12

Moi je verrais plutôt ça comme ça : tu définis une fonction qui compte tous les termes d'une liste jusqu'à ce qu'elle rencontre un élément donné en paramètre, et tu définis une seconde fonction (qui sera celle que tu appelleras) qui appelle la première dès qu'elle rencontre un élément égal à celui passé en paramètre.

Par exemple, tu as une liste qui vaut (1 2 3 4 5 6). Tu appelles (fun2 '(1 2 3 4 5 6) 3 6) pour connaitre le nombre d'éléments entre le 3 et le 6. Tant que tu n'as pas atteint le 3, tu réappelles ta fonction sur le reste de la liste. Une fois que tu as atteint le 3, tu appelles (fun1 '(3 4 5 6) 6) qui va calculer la longueur de la liste en s'arrêtant dès qu'elle tombe sur 6.

Je peux difficilement t'aider plus sans te donner la solution.

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Programmation
  • Création de sites web
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment