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 :

question lisp programme


Sujet :

Lisp

  1. #1
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 208
    Points : 60
    Points
    60
    Par défaut question lisp programme
    Bonjour,

    Pourriez vous me dire comment on fait pour dire en lisp

    ( "aléa" "aléatoire") le premier mot est aléa et le 2 c'est aléatoire

    comment dire si le premire mot

    en récursif :

    on est arrivé à la fin du deuxième mot : vrai (comme dans aléa) sachant qu'il on le meme mot les deux mots ??

  2. #2
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 208
    Points : 60
    Points
    60
    Par défaut
    Bonjour,

    je voudrai savoir comment on fait pour introduire le compteur a l’intérieur d'une fonction

    exemple :

    (defun french-string>= (mot1 mot2 &optional (compteur 0))
    (cond
    ((equal (char mot1 compteur) (char mot2 compteur)) (incf compteur) t) ))



    mais ça marche pas quand j’incrémente le compteur (french-string>= "flan" "flan") => t

  3. #3
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Points : 1 878
    Points
    1 878
    Billets dans le blog
    21
    Par défaut
    Hello,

    Ta fonction est mal formée; cela devrait marcher:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    (defun fs (m1 m2 cpt)
    	   (cond
    	     ((equal (char m1 cpt) (char m2 cpt)) (incf cpt))
    	     (T T)))

  4. #4
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 208
    Points : 60
    Points
    60
    Par défaut
    Non moi ce que je cherche est le suivant

    Définir la fonction french-string>=, dont les spécifications sont :

    (french-string>= "aléa" "aléatoire") => nil
    (french-string>= "arbitre" "arbre") => nil
    (french-string>= "aléatoire" "aléa") => <non nil>
    (french-string>= "arbre" "arbitre") => <non nil>
    (french-string>= "arbre" "arbre") => <non nil>

    Elle présente quatre cas en récursif :

    on est arrivé à la fin du deuxième mot : vrai (comme dans aléa)
    on est arrivé à la fin du premier mot : nil
    les énièmes caractères de chaque mot sont identiques : on continue
    on compare les énièmes caractères avec french-char>= pour trouver la réponse


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    (defun french-string>= (mot1 mot2 &optional (compteur 0))
    (cond
    ((and (equal (char  mot1 (1- (length mot1))) (char  mot2 (1- (length mot1)))) (> (length mot2) (length mot1))) nil )   # pour exemple de (french-string>= "aléa" "aléatoire")
    ((equal (french-char>= (char mot1 compteur) (char mot2 compteur)) t)  (french-string>= mot1 mot2 (+ 1 compteur))) 
    ((equal (french-char>= (char mot1 compteur) (char mot2 compteur)) nil)  nil)))
    french-char>= c'est une fonction qui renvois (french-char>= #\a #\a) => <une valeur non nil>; a suit a que j'ai déja fais et que j'utilise dans cette fonction french-string

    merci de m'aider

  5. #5
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2013
    Messages : 610
    Points : 1 878
    Points
    1 878
    Billets dans le blog
    21
    Par défaut
    Ok je comprends ce que tu recherches.

    A mon avis tu t'y prends mal, ou au moins pas dans un esprit très lispien. L'idée c'est de séparer au maximum entre des fonctions différentes, pour qu'elles soient courtes et claires.

    En l'occurrence, tu as déjà un cas où la fonction renvoie toujours Nil, c'est quand le mot 1 est plus court que le mot 2. De toute façon tu dois mesurer le mot le plus court pour éviter de dépasser la fin de la chaîne. Donc tu peux faire une première fonction pour cela, qui en appelle une autre, où tu peux utiliser la récursivité (qui n'est pas la plus adaptée dès lors que tu accèdes à un tableau de caractère plutôt qu'à une liste de caractères):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    (defun fs (m n)
      (let ((ln (length n)))
        (unless (< (length m) ln) ;; on arrivera en premier lieu à la fin du premier mot -> Nil
          (fsp m n 0 ln))))
     
    (defun fsp (m n c ln)
      (or (= c ln) ;; fin du deuxième mot -> T
          (if (equal (char m c) (char n c)) ;; si égal ...
    	  (fsp m n (1+ c) ln) ;; on continue ...
              (french-char>= (char m c) (char n c))))) ;; sinon on compare avec ta fonction

  6. #6
    Membre du Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Janvier 2014
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Janvier 2014
    Messages : 208
    Points : 60
    Points
    60
    Par défaut
    Oui finalement j'ai fais comme votre proposition en restant des heures sur ce code :s

    Merci

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

Discussions similaires

  1. question de programmation
    Par ptitbob61 dans le forum C
    Réponses: 13
    Dernier message: 08/02/2007, 19h21
  2. Question de programmation d'une classe
    Par JoN28fr dans le forum C++
    Réponses: 2
    Dernier message: 25/10/2006, 14h55
  3. [Configuration] question sur programmation d'untranet
    Par zana74 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 4
    Dernier message: 20/08/2006, 12h59
  4. Question de programmation générale
    Par Bleys dans le forum Delphi
    Réponses: 4
    Dernier message: 31/05/2006, 14h03
  5. [Question de programmation] Comment piloter un port USB ?
    Par Hucklus dans le forum C++Builder
    Réponses: 1
    Dernier message: 14/02/2006, 16h33

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