IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Lisp Discussion :

CLISP - Fonction qui construit la liste de nombres plus petits ou égaux


Sujet :

Lisp

  1. #1
    Nouveau membre du Club
    Femme Profil pro
    informatique
    Inscrit en
    Août 2018
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2018
    Messages : 26
    Points : 32
    Points
    32
    Par défaut CLISP - Fonction qui construit la liste de nombres plus petits ou égaux
    Bonjour,

    Je voudrais créer une fonction qui construit, à partir d'une liste de nombres, la liste des nombres plus petits ou égaux qu'un nombre donné, comme par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (inf 12 '(3 5 15 12 24 2 35)) => (3 5 12 2)
    Voila ce que j'ai fait pour l'instant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    (defun inf (n l)
    (cond
    ((not l) nil)
    ((>= (car l) n) (inf n(cdr l))))
    (cons(car l)(inf n(cdr l))) ))
    Mais il me retourne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    - Program stack overflow. RESET
    J'ai essayer de modifier un peu, en rajoutant des "cons" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    (defun inf (n l)
    (cond
    ((not l) nil)
    ((>= (car l) n)(cons n(inf n(cdr l))))
    ((car l)(inf n(cdr l))) ))
    Mais c'est toujours pas ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    (inf 4 '(1 2 3 4 5 6))
    (4 4 4)
    ce que je voudrais c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    (inf 4 '(1 2 3 4 5 6))
    (4 5 6)
    Qu'est - ce que l'ai loupé ?

  2. #2
    Nouveau membre du Club
    Femme Profil pro
    informatique
    Inscrit en
    Août 2018
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2018
    Messages : 26
    Points : 32
    Points
    32
    Par défaut
    Finalement, j'ai réussi à le résoudre. J'ai mal placé les parenthèses

  3. #3
    Expert éminent
    Avatar de Pyramidev
    Homme Profil pro
    Développeur
    Inscrit en
    Avril 2016
    Messages
    1 481
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Avril 2016
    Messages : 1 481
    Points : 6 137
    Points
    6 137
    Par défaut
    Bonjour.

    Je débute moi aussi en Common Lisp.

    Voici un code plus simple qui s'appuie sur la fonction remove-if :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    (defun remove-if-greater-than (the-number the-list) (
      remove-if #'(lambda(x)(> x the-number)) the-list
    ))
     
    (write-line(write-to-string(
      remove-if-greater-than 12 '(3 5 15 12 24 2 35)
    )))
    Cela affiche bien dans la sortie standard :

  4. #4
    Nouveau membre du Club
    Femme Profil pro
    informatique
    Inscrit en
    Août 2018
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2018
    Messages : 26
    Points : 32
    Points
    32
    Par défaut
    Merci beaucoup !

  5. #5
    Membre actif
    Homme Profil pro
    Inscrit en
    Mai 2013
    Messages
    152
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Mai 2013
    Messages : 152
    Points : 275
    Points
    275
    Par défaut
    La fonction est parfait sauf le formatage du code. On le fait plutôt de cette façon :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    (defun remove-if-greater-than (the-number the-list)
      (remove-if #'(lambda (x) (> x the-number)) the-list))
    ou bien
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    (defun remove-if-greater-than (the-number the-list)
      (remove-if #'(lambda (x)
                     (> x the-number))
                 the-list))
    Les règles de formatage se trouvent ici :
    http://dept-info.labri.fr/~strandh/T...dentation.html
    Un éditeur spécialisé tel comme Emacs est indispensable.

    On peut vérifier le code comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (print (remove-if-greater-than 12 '(3 5 15 12 24 2 35)))
    Mais la nature dynamique de Lisp permet l’interaction avec un Lisp en marche (et en effet encourage la programmation interactive). Un environnement de développement tel comme Slime contient un REPL: la boucle « lecture ― évaluation ― affichage ». Là, on écrit à l’invite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (remove-if-greater-than 12 '(3 5 15 12 24 2 35))
    et le résultat est affiché.

    Je recommande Portacle https://portacle.github.io/ : un environnement comportant SBCL, Emacs et d’autre outils, très facile à installer.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 3
    Dernier message: 15/08/2018, 20h24
  2. Changer une fonction qui utilise une liste par un tableau!
    Par sara21 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 03/05/2007, 13h18
  3. Fonction qui renvoie une liste
    Par la_praline dans le forum GTK+ avec C & C++
    Réponses: 20
    Dernier message: 20/04/2007, 21h22
  4. [MySQL] Fonction qui génère une liste
    Par Marco85 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 30/03/2007, 13h37
  5. fonction qui met en liste les noms des fichiers
    Par aliassaf dans le forum Général Python
    Réponses: 2
    Dernier message: 22/06/2006, 11h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo