Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1000 connectés 

  FORUM HardWare.fr
  Programmation
  Divers

  [Scheme] Un langage sans boucles...

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Scheme] Un langage sans boucles...

n°312944
antsite
Je me souviens
Posté le 19-02-2003 à 12:56:46  profilanswer
 

Salut,
Nous sommes en train d'étudier scheme. Or en parcourant rapidement la doc, il me semble que ce langage n'est pas implémenté de fonctions de "bouclage", tout se fait par récursion.
Déjà il faut d'habituer à ça et c'est pas évident quand on vient de langages plus "classiques".
Mais quels sont les avantages de la récursion par rapport aux boucles traditionnelles for, while,... ? Franchement je vois pas trop, scheme ça a pas l'air terrible...

mood
Publicité
Posté le 19-02-2003 à 12:56:46  profilanswer
 

n°312971
Taz
bisounours-codeur
Posté le 19-02-2003 à 13:12:30  profilanswer
 

perso, j'ai commencé par le Scheme et j'aime bien
 
d'un point du vue général,la récursion n'a aucun avantage par rapport à une boucle itéative puisque le résultat est le meme, si ce n'est les problèmes de pile ( => récursivité terminale ou non-terminale). Mais comprends bien que le Scheme est un langage fonctionnel, qu'il n'a pas le meme emploi que des langages procéduraux+fonctionnel comme le C considéré comme classique. C'est un autre paradigme de programmation. Heureusement pour toi, la théorie t'assure que tout ce qui est faisable dans un paradigme est faisable dans tous les autres.
 
au début je voyais pas trop l'interet de Scheme mais c'est tres puissant dans le traitement de listes (grand frere Lisp), on peut faire del'objet avec, c'est tres utilisé dans la vie artificiel (notemment pour programmer des boïdes) et les lambdas expressions permettent de faire des calculs tres poussés et de générer du code à la demande. Vu que tu débutes, cela est un peu loin, mais je t'assure, te braque pas, prends ce langage pour ce qu'il est, et tu va découvrir sa puissance.
 
edit: si t'as des problèmes, n'hésite pas à les soumettre


Message édité par Taz le 19-02-2003 à 13:13:32
n°312972
BifaceMcLe​OD
The HighGlandeur
Posté le 19-02-2003 à 13:13:12  profilanswer
 

La simplicité d'écriture. Mais c'est sûr que quand on a l'esprit déformé par un certain type de langage, on a toujours du mal à s'en extraire pour penser plus général (ce n'est pas une critique personnelle, je l'ai constaté sur moi comme sur de nombreux autres programmeurs, et cela m'a été confirmé par plusieurs formateurs)

n°312977
antsite
Je me souviens
Posté le 19-02-2003 à 13:17:49  profilanswer
 

Merci et ok je penserais à poster si je rencontre des problèmes dont je n'arrive pas à voir le bout!
 :hello:

n°312995
nraynaud
lol
Posté le 19-02-2003 à 13:31:20  profilanswer
 

BifaceMcLeOD a écrit :

La simplicité d'écriture. Mais c'est sûr que quand on a l'esprit déformé par un certain type de langage, on a toujours du mal à s'en extraire pour penser plus général (ce n'est pas une critique personnelle, je l'ai constaté sur moi comme sur de nombreux autres programmeurs, et cela m'a été confirmé par plusieurs formateurs)


 
[++]
Perso, j'étais pas convaincu par le Smalltalk au début, maintenant je trouve que c'est l'un des meilleurs langages d'apprentissage des techniques objet.
 
C'est la première sémantique différente de C que j'ai apprise, depuis je suis passé par FORTH, O'Caml, Eiffel (certaines parties sont innovantes), jusqu'à Curry en passant par Haskell et les IO monads.

n°313047
biniou
Posté le 19-02-2003 à 14:15:00  profilanswer
 

ANTSite a écrit :

Salut,
Nous sommes en train d'étudier scheme. Or en parcourant rapidement la doc, il me semble que ce langage n'est pas implémenté de fonctions de "bouclage", tout se fait par récursion.
Déjà il faut d'habituer à ça et c'est pas évident quand on vient de langages plus "classiques".


 
les languages fonctionnels (comme Scheme, CAML, Lisp) (les autres que tu appelles classique sont dits languages impératifs) sont extrèmement puissants quand on les connait bien (ce qui n'est pas mon cas :D). Le truc que j'adore en fait, c'est que les programmes manipulent des listes, et les programmes sont eux mêmes des listes. Ca permet de faire des trucs extrèmement puissants, du genre un programme qui "apprend" des choses en s'auto modifiant

n°313081
nraynaud
lol
Posté le 19-02-2003 à 14:32:52  profilanswer
 

biniou a écrit :


 
 les programmes sont eux mêmes des listes.  


 
C'est plutôt la possibilité de mettre une fonction dans une variable qui est intéressante. Je connais rien qui permette de décomposer l'arbre syntaxique au run-time "de base dans le système".

n°313137
Kristoph
Posté le 19-02-2003 à 15:28:27  profilanswer
 

nraynaud a *crit :


 
C'est plut*t la possibilit* de mettre une fonction dans une variable qui est int*ressante. Je connais rien qui permette de d*composer l'arbre syntaxique au run-time "de base dans le syst*me".


 
Si, on appelle ca le Lisp. On doit pouvoir faire ca en Prolog aussi.

n°313147
nraynaud
lol
Posté le 19-02-2003 à 15:34:09  profilanswer
 

Kristoph a écrit :


 
Si, on appelle ca le Lisp. On doit pouvoir faire ca en Prolog aussi.
 


 
Effectivement, j'ai dit une connerie. Désolé.
 
OTAN pour moi.

n°313221
BifaceMcLe​OD
The HighGlandeur
Posté le 19-02-2003 à 16:35:49  profilanswer
 

biniou a écrit :


 
les languages fonctionnels (comme Scheme, CAML, Lisp) (les autres que tu appelles classique sont dits languages impératifs) sont extrèmement puissants quand on les connait bien (ce qui n'est pas mon cas :D).


C'est effectivement à cette catégorie de langages à laquelle je pensais. :D  :jap:  
Mais je me souvenais du mot "impératif"... ;)
 

Citation :

Le truc que j'adore en fait, c'est que les programmes manipulent des listes, et les programmes sont eux mêmes des listes. Ca permet de faire des trucs extrèmement puissants, du genre un programme qui "apprend" des choses en s'auto modifiant


Effectivement, les langages basés sur des listes rendent cela très facile. Perso, j'ai découvert cela en apprenant Logo, qui est un petit frère de Lisp (je n'étais pas grand à l'époque.  :whistle: Ca ne me rajeunit pas ! :ouch: ).

mood
Publicité
Posté le 19-02-2003 à 16:35:49  profilanswer
 

n°313476
biniou
Posté le 19-02-2003 à 20:42:47  profilanswer
 

nraynaud a écrit :


 
C'est plutôt la possibilité de mettre une fonction dans une variable qui est intéressante. Je connais rien qui permette de décomposer l'arbre syntaxique au run-time "de base dans le système".


 
bah ça, tu peux le faire dans d'autres languages, avec les pointeurs de fonctions....

n°313498
HelloWorld
Salut tout le monde!
Posté le 19-02-2003 à 21:14:07  profilanswer
 

Mouai, moi Scheme, j'ai pas été convaincu.
La récursion la récursion ... on a évoqué les 2 types : terminale et non terminale.
Personnelement j'estime que seul la récursivité non terminale est digne d'interrêt (en particulier dans les arbres, comme par exemple parcourir une arborescence).
La récursivite terminale ... une boucle classique est AMHA plus lisible. Quand en + on sait que ces langages en général s'amusent par derrière a transformer ta récursion terminale en une boucle ...
Et on a beau eu me dire ceci cela, j'ai pas une super opinion de scheme. Les listes c'est puissant d'accord ... mais tout faire avec ca ... pour moi c'est comme programmer uniquement avec des GOTO. On peut tout faire avec les GOTO : les if...then...else, les while...loop, les for...to..., for_each, do...for, ... donc le goto, c'est hyper puissant. Mais c'est quand même mieux d'utiliser ce qu'il convient plutot que de le faire avec des goto. Idem avec les listes. Les listes, c'est hyper puissant, ouai. Mais l'utiliser comme un tableau, une pile, un TAD, ou je ne sais quoi, moi je préfère utiliser ce qui convient le mieux (C++ + STL :love:) que de faire ça avec "le goto des TAD".
Au début j'ai trouvé ca rigolo, mais quand j'ai vu la magouille que c'est pour obtenir la taille d'une liste, ou des trucs du genre ecrire une 2° fonction qui accepte un paramètre de + (on doit assez souvent le faire pour une fonction donnée), j'ai eu une autre vision de la "puissance" du traitement par listes.
Et puis 10000 parentheses par ligne, ca saoule a force.
Un TAD du genre Type.champ1.Champ2.Valeur me parrait nettement plus lisible / evident que cadddr.
Non, désolé, moi j'ai pas été convaincu.
En + en C++, j'ai croisé une lib qui en gros implémentait LISP.


---------------
FAQ fclc++ - FAQ C++ - C++ FAQ Lite
n°1215096
chato_dur
Posté le 05-10-2005 à 01:31:51  profilanswer
 

Salut,  
 
Je vois que ca parle de scheme alors je fais un up, jaimerai implementer un type abstract pile et file, avec les "methodes" classique,  pop, push, size, isempty, ajouter en tete, ajouter en queue etc.  
 
J'ai commence, mais je n'arrive pas a implementer la fonction size, ca doit pas etre violent, ma pile se base sur une liste que je parcours et qui me dit combien y a delement ds celle ci.  
 
Qq un pourrait me donner un coup de main pour cette fonction svp ? (jutilise juste les trucs de bases pour les listes genre CDR CAR etc)
 
Merci :-/

n°1215098
Taz
bisounours-codeur
Posté le 05-10-2005 à 01:37:32  profilanswer
 

t'arrive pas à coder la longueur du liste ?

n°1215099
chato_dur
Posté le 05-10-2005 à 01:41:57  profilanswer
 

En fait, je voudrais lequivalent d'un list.getSize() en Java ou autre.  
 
japellerai ca comme ca :  
(define pile (list 'a 'b 'c 'd))
(size pile)  
et il me rendrait 3. Je voudrais juste faire ca en fait, mais je galere pour parcourir ma liste tout en retennant le nombre dobjet que jai  trouve (il ne faut pas que je detruise ma pile non plus)  
 

n°1215100
Taz
bisounours-codeur
Posté le 05-10-2005 à 01:44:48  profilanswer
 

et comment tu la coderais cette fonction size ?

n°1215101
chato_dur
Posté le 05-10-2005 à 01:48:36  profilanswer
 

alors ce que jai commence a faire, cest super bourrin, ca marche pas, jpeux pas le lancer et jutilise les fonctions a linstinct car je ne les connais pas assez... :
 
(define size(stack)
  (define compteur 0)  //ca deja ca marche pas
  (lambda (stack, compteur)
  (cond
     (null? stack) compteur
      (else
          (car stack)
          (+ compte 1)
          (lambda (cdr stk) compte)
))))
 
Cest vraiment en bourrinant, je sais franchement pas comment faire ca en fait :(


Message édité par chato_dur le 05-10-2005 à 01:49:23
n°1215102
Taz
bisounours-codeur
Posté le 05-10-2005 à 01:49:47  profilanswer
 

bah commence par apprendre comment on définit :
- une fonction
- une variable locale
- une fonction récursive

n°1215103
chato_dur
Posté le 05-10-2005 à 01:51:49  profilanswer
 

Jai des doc la dessus avec la fonction "let" et compagnie mais mon interpretteur veut pas lexecuter, alors je suis un peu mal. Je le redit, cest la version bourrin car je ne vois pas comment faire...

n°1215104
Taz
bisounours-codeur
Posté le 05-10-2005 à 01:52:39  profilanswer
 

ben faut apprendre un minimum.

n°1215105
chato_dur
Posté le 05-10-2005 à 01:56:37  profilanswer
 

Oui je sais mais cest ce que je suis en train de faire, autant je m'en sors pour les autres fonction que jai eu a faire mais celle avec un compteur, je vois pas le truc. Un petit coup de main aurait pas fait de mal, cest le but d'un forum :/

n°1215106
Taz
bisounours-codeur
Posté le 05-10-2005 à 01:58:19  profilanswer
 

ben tu t'en sors pour rien si t'es pas capable d'écrire une fonction récursive.
 
(define plus3 (lambda (x) (+ x 3)))
 
tu vas pas bien loin avec ça

n°1215107
chato_dur
Posté le 05-10-2005 à 02:00:28  profilanswer
 

desole de demander de l'aide, j'ai fait l'erreur d'etre debutant et de demander un coup de pate a des gens qui sont cense savoir fait ca en qq seconde de leur temps.


Message édité par chato_dur le 05-10-2005 à 02:00:46
n°1215108
Taz
bisounours-codeur
Posté le 05-10-2005 à 02:04:42  profilanswer
 

joue pas le martyre. On veut bien aider, mais là ça fait 5 minutes que tu fais du scheme, t'as même pas la force de chercher un tutoriel sur google. C'est pas la peine de pleurer : commence par te renseigner sur ce qu'un langage fonctionnel, son fonctionnement, ses principes, ses règles. Et la syntaxe de scheme.
 
T'es capable d'écrire une fonction flip qui ferait ça :
 
(flip '(1 2))  => (2 1)
 
?

n°1215109
Taz
bisounours-codeur
Posté le 05-10-2005 à 02:06:23  profilanswer
 

et la charte est clair : on fait pas les devoir. On aide à apprendre.
 
Si tu veux torcher le truc, tu googles et tu vas la trouver la fonction prédéfinie qui te donne la longueur d'une liste. Seulement c'est comme vouloir coder une résolution d'équation si tu sais pas comment fonctionne une addition

n°1215110
chato_dur
Posté le 05-10-2005 à 02:10:13  profilanswer
 

bah si, jpeux te faire une fonction qui te flip une liste meme si tu veux...
 
(define (flipdeliste lst)
  (cond  
    [(null? lst) '()]
    [else (append (flipdelist (cdr lst)) (list (car lst)))]
)
)
mais mon probleme c'est que jai pas vu d'exemple pour compter des elements ou autres, je voudrais juste avoir un exmple avec une fonction size, c'est pas plus sorcier :/

n°1215111
Taz
bisounours-codeur
Posté le 05-10-2005 à 02:10:47  profilanswer
 

c'est pas du scheme ça.

n°1215112
Taz
bisounours-codeur
Posté le 05-10-2005 à 02:11:38  profilanswer
 

et puis quand on apprend, on essaie de faire sans append. on utilise cons
 
edit: append bien inutile dans ce cas


Message édité par Taz le 05-10-2005 à 02:12:10
n°1215113
chato_dur
Posté le 05-10-2005 à 02:13:19  profilanswer
 

Mdr c'est quoi si cest pas du Scheme ?
 
append inutile ? Peut etre, japprends !


Message édité par chato_dur le 05-10-2005 à 02:13:47
n°1215114
Taz
bisounours-codeur
Posté le 05-10-2005 à 02:13:58  profilanswer
 

(et puis je demandé une version pour pair pointée.

n°1215115
Taz
bisounours-codeur
Posté le 05-10-2005 à 02:15:08  profilanswer
 

[] c'est pas des masses du scheme. J'y peux rien.

n°1215116
Taz
bisounours-codeur
Posté le 05-10-2005 à 02:15:22  profilanswer
 

comment t'écrirais append sinon ?

n°1215117
chato_dur
Posté le 05-10-2005 à 02:17:29  profilanswer
 

Je sais pas, on m'a appris avec des crochets pour bien voir les conditions moi... en tout cas ca marche c'est que cest pas completement pas du scheme :)

n°1215119
Taz
bisounours-codeur
Posté le 05-10-2005 à 02:22:48  profilanswer
 

(flipdeliste '(1 2))
standard input:8:1: In procedure cond in expression (flipdeliste (quote #)):
standard input:8:1: bad or missing clauses
ABORT: (misc-error)
 
ça marche terrible

n°1215122
chato_dur
Posté le 05-10-2005 à 02:28:52  profilanswer
 

ok, en effet ca merde avec ma condition :/
 
Marrant ce topic, faut etre teste avant de pouvoir avoir une reponse :) le concept est  interessant, quelque peu elitiste mais interessant

n°1215124
chato_dur
Posté le 05-10-2005 à 02:31:03  profilanswer
 

(define (flipdeliste lst)
  (cond  
   [(null? lst) null]
   [else (append (flipdeliste (cdr lst)) (list (car lst)))]
))
 
> (define lst (list 'a 'b 'c))
> (flipdeliste lst)
(cons 'c (cons 'b (cons 'a empty)))
>  
 
 
voila, ca marche

n°1215126
Taz
bisounours-codeur
Posté le 05-10-2005 à 02:32:07  profilanswer
 

bien sur qu'il faut tester. On programme !
les [] c'est bien sur ton cahier mais c'est pas du scheme.
 
Commence par écrire my_append qui fait comme append, et une autre fonction factorial et on verra ensuite.
 
Je ne suis pas élitiste, sinon je ne serais plus là. Seulement je peux pas faire grand chose pour quelqu'un qui utilise des []

n°1215127
chato_dur
Posté le 05-10-2005 à 02:36:55  profilanswer
 

Alors tu es qq un de ferme, les[] ca change rien, j'ai appris comme ca, jmen fou de les mettre, si javais su que tu faisais un delit de sale gueule sur les code avec crochets, j'en aurait pas mis.  
 
bon jte fais une factorial parceque jle sens bien et parceque je suis un debutant qui apprend et qui le vaut bien.  
 
(define factorial
(lambda (n)
  (if (= n 0)  1
   (* n (factorial (- n 1))))))
 
tu veux toujours pas me filer un coup de main pour la size ? ca tient en 6 lignes je parie mais jvois pas la technique...

n°1215128
Taz
bisounours-codeur
Posté le 05-10-2005 à 02:44:49  profilanswer
 

bon ben démerde toi si c'est comme ça. T'as qu'à apprendre une langue étrangère et utiliser des lettres qui n'existent pas.

n°1215129
chato_dur
Posté le 05-10-2005 à 02:47:50  profilanswer
 

Oh grand maitre venere du Scheme, je regrette d'etre tombe sur toi mais on s'est bien marrer qd meme. Ceci dit tu dois avoir de lourds problemes dans la vie de tous les jours si t'es aussi extremiste.  
 
Merci quand meme pour le test, c'etait une bonne ambiance :)
 
Edit : en plus les-dites lettres existent... tu l'as vu par toi meme, ca marche avec les crochets qui font de moi un sous-codeur...  :hello:


Message édité par chato_dur le 05-10-2005 à 02:58:12
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Divers

  [Scheme] Un langage sans boucles...

 

Sujets relatifs
Compilation & langage assembleur.Cherche Cours Langage MDX (OLAP) ! Urgent ! Merci
condition dans boucles for[recherche] rippeur audio en langage shell !!!!
Quel langage pour une appli de gestion comptable & commerciale ?choix dun langage
PHPNuke multi langagelangage/librairies pour manipulation images 2D/3D
Bonsoir tt le monde, G un pb de boucles dans des boucles..algo de langage evenementiel HELP
Plus de sujets relatifs à : [Scheme] Un langage sans boucles...


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR