•  cahya untoreh

Julia lispisms

Bab-bab sing dakanggep mbingungake babagan sintaksis julia

Julia parses sintaks sawijining meh kaya lisp. Nanging sintaksis ora kaya s-exprs dadi kudu nangani konteks sing beda-beda ... ayo deleng:

Simbol ing julia:

typeof(:abc)
# Symbol

Uga simbol:

typeof(:(abc))
# Symbol

Ora simbol:

typeof(:(abc isa Symbol))
# Expr

Dadi sawise sawetara spasi dadi ekspresi, utawa a dhaptar.

Nanging ing:() notasi yaiku ora ngutip . Ekspresi isih valid kode julia. Nyatane:

typeof(esc(:(abc def)))
# ERROR: syntax: missing comma or ) in argument list

Wiwitabc def ora bener kode julia. Dadi ing:() notasi luwih kaya lisp(read '(...)) . Where kita instrument compiler kanggo maca kode sing dipetik.

Sampeyan pengin mung ngutip barang? Sampeyan ora bisa ngutip ekspresi lengkap, nanging sampeyan bisa ngutip simbol:

typeof(QuoteNode(:abc))
# QuoteNode

Ngendi iki digunakake ing umum? Kanggo menehi hasil karo ambiguities antarane kaiket simbol lan simbol literal. Simbol terikat yaiku variabel, fungsi, modul:

m = :Main
eval(:(typeof($m)))
# Module

Apa yen kita wanted ing:Main simbol?

eval(:(typeof($(QuoteNode(m)))))
# Symbol

Aja diapusi deningquote ... end sintaksis. Iku ora aQuoteNode:

typeof(quote abc end)
# Expr

Iki minangka ekspresi multi-line kaya:() , kayabegin ... end.

Mungkin julia bisa luwih praktis minangka lisp ing ngendi sampeyan mung ngliwati dhaptar sing dipetik'(...) kanthi nduwe sesuatu sing luwih apik tinimbang senar:

eval(Base.Meta.parse("abc def"))

ora ngerti.

Tag Pos: