Emacs Lisp ve Common Lisp'in sözdizimi ile çok yakından ilişkili olduğunu düşündüğümden, RosettaCode adresinde bulduğum örnek kodu takip edebilirim, ancak yanlış olduğum ortaya çıktı.ELisp'te nasıl adlandırılmış argümanlar yapabilirim?
söz konusu kod şuna benzer:
(defun print-name (&key first (last "?"))
(princ last)
(when first
(princ ", ")
(princ first))
(values))
Ve RosettaCode göre aşağıdaki yapmalıdır:
Şimdi> (print-name)
?
> (print-name :first "John")
?, John
> (print-name :last "Doe")
Doe
> (print-name :first "John" :last "Doe")
Doe, John
, olay şu;
*** Eval error *** Wrong number of arguments: (lambda (&key first (last "?")) (princ la\
st) (if first (progn (princ ", ") (princ first))) (values)), 0
Bunu demek oluyor bilmek lisp yeterli routined değilim ve öne vardır Googling hiçbir miktar: Ben elisp yorumlayıcı bu işlevi çalıştırmayı denediğinizde, aşağıdaki hatayı alıyorum Bana bir cevap daha yakın.
Emacs Lisp'te bunu yapmanın doğru yolu nedir?
deyimsel, yerine args' dinlenme '& kullanmayı tercih ediyorum ve' az sözdizimsel dağınıklığı vardır plist olarak args', ayrıştırmak: '(baskı
Birlikte bu sadece senin soru gibi
print-name
çağrı sağlar -name: ilk "John": son "Doe") '. – lunaryorn