"# '(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 .
Gene Simmons, KISS Çizgi Romanlarının Potansiyel Olarak "İnsanlığı Yeniden Yaratabileceğini" Söyledi
Donovan, Şarkılarından 1'ini The Beatles'ın "Lucy in the Sky with Diamonds" şarkısıyla karşılaştırdı
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'
Tom Girardi Dolandırıcılık Suçlamalarından Yargılanma Yetkisinin Belirlenmesi İçin Duruşmaya Katıldı