"# '(Lambda…" ve "(lambda…"? [Duplicate] arasında bir fark var mı?
Dec 14 2020
Gelen Pratik Common Lisp bir örneği var REMOVE-IF-NOT
bir lambda'da:
CL-USER> (remove-if-not #'(lambda (x) (evenp x)) '(1 2 3 4 5))
(2 4)
Bu şunlardan farklı mı?
CL-USER> (remove-if-not (lambda (x) (evenp x)) '(1 2 3 4 5))
(2 4)
Bir (lambda..)
değer, alıntılanan işlev biçimiyle çakışıyor #'(..)
mu? REPL'de öyle görünüyor, ancak Lisp'te yeniyken bir şeyi gözden kaçırabilirim (ve lafı kesinlikle yanlış anladım, bu yüzden lütfen beni de düzeltin).
Yanıtlar
4 tfb Dec 14 2020 at 19:03
Şüphelendiğiniz gibi bu iki şey aynıdır:
#'
bir okuma makrosudur ve#'x
olarak okunur(function x)
. Bu nedenle#'(lambda (...) ...)
, CL'deki argümanının bir işlevi gösterdiğini söyleyen özel operatör(function (lambda (...) ...))
neredefunction
;lambda
genişlemesi: bir makro olarak tanımlanır(lambda (...) ...)
IS(function (lambda (...) ...)
: öncekine özdeş bir şekilde.
Bu araçlar #'(lambda (...) ...)
, (lambda (...) ...)
ve (function (lambda (...) ...))
tüm CL aynı şeyi ifade eder fonksiyonu ile belirtilen tüm göstermektedirler (lambda (...) ...)
geçerli sözcük ortamda.
İnsanların #'(lambda (...) ...)
sürümü kullanmaya devam etmesinin iki nedeni vardır :
- tutarlılık - örneğin bir işlev
#'foo
ise ihtiyacınız var,foo
bu nedenle onu durum için kullanmak daha tutarlı görünebilirlambda
; lambda
Şu anda yaptığı makro tanımına sahip olan her zaman CL'de geçerli değildir, bu nedenle orijinal CL spesifikasyonu ile ANSI standardı arasında yazılan veya o zamanları hatırlayan kişiler tarafından yazılan kod,#'
formu kullanabilir .
Gene Simmons, KISS Çizgi Romanlarının Potansiyel Olarak "İnsanlığı Yeniden Yaratabileceğini" Söyledi
Charly Reynolds Yakın Zamandaki Vokal Kord Ameliyatını Açıkladı: 'Şarkı Söylemekte Sorun Yaşıyordum'
Kevin Jonas'ın Kızı Alena, Doğum Günü Fotoğrafında Büyümüş Görünüyor: '9 Yaşında Gerçek Hissetmiyor'