2011-06-27 17 views
19

Próbowałem zrozumieć Wikipedia article on homoiconity, ale jest zbyt szczegółowy i nie wyjaśnia głównej teorii zwięźle. Powinienem dodać, że nie jestem rodowitym mówcą po angielsku, więc wolę prosty angielski niż akademicki cytat z białego papieru.Co dokładnie oznacza homoikoniczność?

Co dokładnie oznacza, że ​​język jest homoiczny? Co sprawia, że ​​C#, Java lub JavaScript nie są homoiconic?

+0

Nie sądzę, że oznacza to wiele z niczego, jak wyjaśniono tutaj: http://www.expressionsofchange.org/dont-say-homoiconic/ –

Odpowiedz

10

Oznacza "kod jako dane", który jest ogólną charakterystyką rodziny Lisp.

(add 2 3) 

Podobnie jak powyższy ciąg, który jest zarówno listą, jak i wywołaniem funkcji. Prefiks "Homo" oznacza tę cechę.

9

Schemat jest homo-ikoniczny, ponieważ jego programy interpretowane są jako struktury danych.

'(define (foo x) (* x x)) 

jest lista, przy czym pierwszy element jest define, drugie (foo x) (liście) i tak dalej. Znak zapytania ' oznacza: nie interpretuj tego, zostaw jako listę. Jeśli usuniemy ', otrzymamyktóra jest definicją funkcji schematu. Ponieważ definicje programów Scheme są zagnieżdżonymi wyrażeniami listy (i tym samym rodzajem "literałów z drzewa składniowego"), a Scheme jest językiem dynamicznym, można w tym celu wykorzystać sztuczki do zbudowania bardzo wydajnych systemów generujących makra/kody.

Teraz Java nie jest homo-ikoną tylko dlatego, że nie dostarcza tego rodzaju "literałów programowych", które oceniają parsowanie fragmentów drzewa. Oczywiście, można zdefiniować ciąg

String helloWorld = 
    "class Hello { public static void main(System.out.println(\"Hello, world!\"); }"; 

które można analizować i karmić do kompilatora, ale to niewygodne, ponieważ jest to ciąg zamiast zorganizowany termin.

Powiązane problemy