Гоконичность в Lisp легко видеть:
(+ 1 2)
- это вызов функции + с 1, 2 в качестве аргументов, а также список, содержащий +, 1 и 2. Это одновременно и код, и данные.
На языке, подобном Джулии, хотя:
1 + 2
Я знаю, что мы можем разобрать это в Expr в Джулии:
:(1 + 2)
И тогда мы сможем получить АСТ и манипулировать им:
julia> Meta.show_sexpr(:(1+2))
(:call, :+, 1, 2)
Итак, мы можем манипулировать программой AST в Julia (и Elixir). Но являются ли они homoiconic в том же смысле, что и Lisp - это какой-нибудь фрагмент кода, который действительно является только структурой данных в самом языке?
Я не вижу, как такой код, как 1 + 2 в Julia, сразу же похож на данные, как (+ 1 2) в Lisp является просто списком. Это все еще гомиконический, тогда?