Langage Scheme

Résolu/Fermé
tylerrute Messages postés 3 Date d'inscription lundi 12 novembre 2012 Statut Membre Dernière intervention 12 novembre 2012 - 12 nov. 2012 à 19:28
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 - 12 nov. 2012 à 21:15
Bonjour,





J'ai vu que le langage Scheme est en relation avec le logiciel Lisp mais je n'y connais rien je débute vraiment à 0. et comme je rencontre des difficultés dans l'apprentissage de mon langage je souhaiterais vous poser des questions.

Là pour chacune des expressions Scheme suivantes je dois indiquer son type et sa valeur de retour. D'après ce que j'ai cru comprendre
pour qu'une fonction soit de type alpha,
-il faut que le nombre d'arguments de l'application soit égal au nombre de types des données de g (lorsque l'expression est une application elle est de la forme (g e1 e2)
-il faut que le type de résultat de g(type qui est donné par la signature de g) soit alpha
- si le type des données de g est x1*b1 (type qui est donné par la signature de g), il faut que l'expression e1( resp.e2) soit de type x1(respB1)
il y a le type Nombre et le type Bool (prédicat).

Donc voilà l'exo avec les expressions dont je dois dire les types et la valeur de retour

1. (= 42 (+2 (*8 (-8 3) ) ) )
2(or ( = 3 3) (equal? "3" 3))
3 (and (=3 3 ) (equal? "3" 3))
4 (or (/84) (/4 0))
5 (and (/8 4) (/4 0))

pour la 1 ça donne (8-3)*8+2= 42
donc ça donne comme valeur de retour 42.
Le type est Nombre.

Pour la 2 on a si e1 vérifie 3=3 alors l'expression est vraie et si c'est faux mais que e2 vérifie tout est vrai quand même car il y a or.
Par contre il met equal en point d'interrogation et 3 entre guillemets, donc comme c'est un or, et qu'il y a plus de chance que ce soit vrai que faux qu'avec un and, je met #T et comme type bool.

Pour la 3 c'est la même expression sauf que que c'est un and.
Je crois avoir compris equal? il nous propose une égalité qu'on doit vérifier. Seulement je ne sais pas ce que donne "3" 3 est-ce que "3"=3?
si ce n'est pas le cas alors je met #F et de type bool.

4. On dit si e1vérifie 2 (8/4=2) alors c'est vrai. Or on a 4/0 donc #F et de type bool.
5. C'est pareil #F et de type bool.

Maintenant est-ce que vous êtes d'accord avec mon interprétation?
Sinon pourriez vous me donner des explications supplémentaires j'ai toujours du mal à différencier les variables, des arguments, des types.

En vous remerciant d'avance je vous prie d'agréer mes sentiments distingués

3 réponses

KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
Modifié par KX le 12/11/2012 à 19:49
"J'ai vu que le langage Scheme est en relation avec le logiciel Lisp"
Lisp n'est pas un logiciel mais un langage (créé en 1958), Scheme est un langage dérivé un peu plus moderne (créé en1970)
Remarque : il y a aussi Common Lisp qui est un dérivé standardisé du langage Lisp.

Personnellement, je connais un peu Common Lisp (pas spécifiquement Scheme), et je ne me souviens pas qu'il y ait de notions de types, mais si tu réfléchis sur les valeurs (qui est plus dans l'esprit des langages fonctionnels) tu devrais facilement déterminer le "type".

Je ne suis pas d'accord avec la 1, (8-3)*8+2=42 c'est un test logique comme le 3=3 que tu as dans les questions 2 et 3, donc ce serait un booléen #T

Pour la 2, effectivement pas de problème car 3=3, et pour la 3 j'hésite aussi, dans la plupart des langages "3" serait différent de 3, mais en Lisp je ne sais plus. Mais tu te poses les bonnes questions c'est un bon début ;-)

Pour 4 et 5, j'aurais envie de dire que les entiers 0 sont égaux au booléen #F, et que tous les autres entiers sont #T, mais une division par 0 ça devrait planter, et tu ne devrais pas avoir de résultat.La confiance n'exclut pas le contrôle
0
tylerrute Messages postés 3 Date d'inscription lundi 12 novembre 2012 Statut Membre Dernière intervention 12 novembre 2012
12 nov. 2012 à 20:45
Je te remercie de m'avoir répondu. Effectivement j'ai toujours un problème pour définir les types d'expression. Mais apparemment ils sont tous de type booléen.
En fait le langage Scheme fait partie comme Lisp des langages fonctionnels de Linux center. C'est pour ça que la première fois,j'ai cru qu'ils allaient ensemble.
Est-ce que mes prochaines questions sur le langage Scheme je devrais les mettre dans le topic programmation?
Parce qu'il y a aucun topic sur le langage Scheme.

En tout cas remerci d'avoir répondu.
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
12 nov. 2012 à 20:48
Le Scheme c'est du Lisp, donc il est très bien dans le forum Lisp.
0
tylerrute Messages postés 3 Date d'inscription lundi 12 novembre 2012 Statut Membre Dernière intervention 12 novembre 2012
12 nov. 2012 à 20:55
donc toutes les expressions sont de type booléen, et les résultats sont soit #F soit #T soit rien?
0
KX Messages postés 16733 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 31 janvier 2024 3 015
12 nov. 2012 à 21:15
Oui ça a l'air, mais je ne suis pas formel car ça dépend de l'implémentation, et le Scheme est un peu différent du Common Lisp. Chez moi quand je testes je n'ai pas #T et #F mais T et nil, et comme equal? n'existe pas je ne sais pas ce que ça fait. De même pour la division par 0 qui me marque une erreur...
0