2010-04-18 18 views
5

Ortak lisp'de bağlama (LET) ve semboller (= değişkenler) arasındaki fark (basit terimlerle) arasındaki fark nedir?common-lisp: ciltleme ve sembol arasındaki fark

+0

"... ve sembolleri (= değişkenler)" ile ne demek istiyorsun? Tanımladığınız iki kavram için bize örnek cümleler verebilir misiniz? –

cevap

6

Semboller ve değişkenler iki farklı türde varlıklardır. Sembol bir şeyin adıdır; değişken, bir değer için bir kapsayıcıdır. Değişken bir sembolle isimlendirilebilir. Bağlama, bir sembol ile bir değişken arasındaki ilişkidir; Bağlama devrede olduğunda, bir değişkene adına göre başvurabilirsiniz. let formu böyle bir bağlanma oluşturur.

+0

Üzgünüm Yeterince açık olmasaydım. Bu öğretici bakıyordu: http://en.wikibooks.org/wiki/Common_Lisp/First_steps/Beginner_tutorial arasındaki farkı nedir : 1 setf (let ((1))) ve ( – martins

+1

(let ((a 1)) ...) bir değişken (yerel sözcük kapsamı ile), A sembolü ile bu değişken arasındaki ("let" kelimesinin içindeki sözcüksel bağlamda) bir bağ oluşturur ve onu 1 olarak başlatır. (setf a 1) farklı şekilde davranabilir: A bağlaması varsa, o zaman değerini değiştirir. Bağlanma yoksa, genel bir A bağlaması oluşturur ve onu 1 olarak başlatır. Ancak, genel bağlanma türü belirtilmemiş bırakılır ve Lisp uygulamaları (ve sürümleri) arasında farklılık gösterir. Yani A adında bir değişkeniniz varsa, setf değeri değiştirecektir; Aksi halde sonuç tam olarak belirtilmemiştir. –

1

(let ((a 1))), son noktaya gelmeden önce, açılış noktasının sonuna gelindiğinde, son noktaya ne olursa olsun, geri dönüş paranteziyle eşleşen kapanma dirseğinin bulunduğu noktaya kadar a'nın 1 değerini ayarlar (veya tanımlanmamış olur). Sıklıkla işlevin sonunda kapsam dışı kalması gereken yerel değişkenlere gereksinim duyduğunuz bir işlevin bedenini görüyorsunuz, böylece orada bir izin kullanabilirsiniz.

(setf a 1) a değerini 1 olarak ayarlar ve daha önce tanımlanmış olanın (defparametre, defvariable veya let olsun) ya da bir değere ihtiyaç duyan yeni bir özel değişken olduğunu varsayar.

Bundan biraz daha karmaşık ama açıklamak için lisp pirzola sahip olduğumdan emin değilim.