"# '(Lambda…" ve "(lambda…"? [Duplicate] arasında bir fark var mı?
Dec 14 2020
Gelen Pratik Common Lisp bir örneği var REMOVE-IF-NOTbir 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#'xolarak 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;lambdageniş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
#'fooise ihtiyacınız var,foobu 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 .
Donovan, Şarkılarından 1'ini The Beatles'ın "Lucy in the Sky with Diamonds" şarkısıyla karşılaştırdı
Nicole Kidman, Michael Keaton ve Val Kilmer'in Batman Olarak Paylaştığı Bu 1 Çekici Özelliğe Bayıldı
Charly Reynolds Yakın Zamandaki Vokal Kord Ameliyatını Açıkladı: 'Şarkı Söylemekte Sorun Yaşıyordum'
Tom Girardi Dolandırıcılık Suçlamalarından Yargılanma Yetkisinin Belirlenmesi İçin Duruşmaya Katıldı