Je vais prendre l'exemple du Lisp que je connais un peu.
En Lisp, tout est liste.
Ça commence mal.
Regarde ce programme lisp :
1
Ou celui-ci :
t
Ou celui-là :
'#.-42
Ou encore :
'|lol kthx bye|
Tout ce que l'homoiconicité ("même image") dit, c'est que le code peut être représenté par des données du langage.
Pour faire simple, si tu as un programme dont le code source est S, alors tu peux peux mettre S dans une variable d'un autre programme du même langage.
En (Common) Lisp ou en Scheme
(+ 1 3)
est un programme, et tu peux écrire
(let ((x '(+ 1 3))) ...)
et ça préserve la structure du programme initial.
alors qu'en C, tu ne peux pas.
Au mieux, tu fais
```
x = "#include int main(int a, int**b){return 42;}"
'''
mais ta chaîne de caractères est une chaîne, pas un programme. Pas possible de l'executer, pas possible de l'analyser sans faire un lexer, un parser…
[^] # Re: Lisp
Posté par Axioplase ıɥs∀ (site web personnel) . En réponse au message Homoiconicité. Évalué à 3. Dernière modification le 04 octobre 2012 à 09:36.
Ça commence mal.
Regarde ce programme lisp :
1
Ou celui-ci :
t
Ou celui-là :
'#.-42
Ou encore :
'|lol kthx bye|
Tout ce que l'homoiconicité ("même image") dit, c'est que le code peut être représenté par des données du langage.
Pour faire simple, si tu as un programme dont le code source est S, alors tu peux peux mettre S dans une variable d'un autre programme du même langage.
En (Common) Lisp ou en Scheme
(+ 1 3)
est un programme, et tu peux écrire
(let ((x '(+ 1 3))) ...)
et ça préserve la structure du programme initial.
alors qu'en C, tu ne peux pas.
Au mieux, tu fais
```
x = "#include int main(int a, int**b){return 42;}"
'''
mais ta chaîne de caractères est une chaîne, pas un programme. Pas possible de l'executer, pas possible de l'analyser sans faire un lexer, un parser…