Гоконичность в 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 является просто списком. Это все еще гомиконический, тогда?