Fikrimi önek gösterimi etrafında mı sarmalıyım?


10

LISP hakkında okuyorum.

Önek notasyonunun belirli bir seviyede nasıl çalıştığını anlıyorum, ancak sezgisel hale getirmek için herhangi bir püf noktası olup olmadığını merak ediyordum.


6
Uygulama dışında, yani?

Kullanıcı RPL benim en sevdiğim LISP lezzetidir. Parantez bile yok! en.wikipedia.org/wiki/RPL_(programming_language) HP 50g'mi kullanmayı özledim :-(
Robbie

İlk başta kasıtlı görünmüyordu, ama şimdi harika olduğunu düşünüyorum ve çoğunlukla okumayı bitirdim. Aslında şu şekilde konuşuyoruz: "... 'ın toplamı, ..." Ancak farklı türde bir okuma gerektiriyor. Şimdi, operatörü bir satırda okumak yerine tüm argümanlara uygulamanız yeterlidir.
Mark C

Önek gösterimi ile ilgili sorun nedir? Hemen hemen tüm diller onu kullanıyor. İşlev çağrıları neredeyse her zaman önektir.
SK-logic

Pek sayılmaz; "sezgisel" sezgiseldir çünkü 20 yıldan fazla bir süredir matematiksel sözleşmeler şeklinde öğrendiniz. Sadece LISP ve belki birkaç başka dil bu konvansiyonu kullandığından ve diğerini daha fazla öğreneceğinizden, eşit derecede "sezgisel" olmayacaktır. Ve burada sadece basit ifadelerden bahsediyoruz (2 + 3 ... "yarım sayfa" bir astarı nasıl denemek istersiniz? :)
Rook

Yanıtlar:


6

Zihinsel olarak doğru fiillerle konuşulan dil olarak soldan sağa okumak yardımcı olabilir. Örneğin (+ 3 2) "üç ve iki ekleyin" olabilir. Daha genel bir durumda, "$ işlenenlerde $ işlemi gerçekleştir" diyebilirsiniz. Aynı durum için geçerlidir: "Ekleme işlemini üç ve ikide gerçekleştirin".


Ne yapardın ( = 1 2 )ve( > 4 2 )
Vivian River

3
Retorik sorular kullanırdınız. :) Eşit? (Ne?), "1 ve 2! (Erm ... Hayır ...)
Arafangion

@RiceFlour (Hey, pirinç unundan yapılmış şeyleri yedim - bir glüten sorunum var.) "Biri ikiye eşit mi?" Veya "Aşağıdakiler eşit mi?" Daha büyük ve daha küçük operatörler önek formunda çok doğal değil, ama Lisp kodunda ne sıklıkta kullanıldıklarını merak ediyorum.
Mark C

7

Hileler? Ne için?

Henüz sizin için sezgisel hissetmiyor çünkü zihinsel ayrıştırıcınız buna alışkın değil. Sadece kullanırsanız ve tekrar tekrar okursanız daha iyi olur.


Bu kadarını bile okumadım , ama şimdi harika olduğunu düşünüyorum. Görünüşe göre beynim parantez hakkında neredeyse "dokunsal" bir his vermeye başlıyor. Bence duygu sadece daha keskin olacak.
Mark C

5

Bunu bir tür işlev çağrısı olarak düşünebilirsiniz:

(operator operand1 operand2 ...)

Bu konuda çok özel bir şey yok. C ++ 'da (ve buna izin veren diğer birçok dilde) işleçleri aşırı yüklerseniz, genellikle bu tür bir işlevi tam olarak bu şekilde tanımlamanız gerekir:

MyClass operator+(MyClass const& x, MyClass const& y);

Evet, işte böyle yapıyorum. Geri çekilip Java, C # vb. Yöntem çağrılarına bakarsanız, bunlar gerçekten biraz farklı bir yerde parantezle önek gösterimi olur: MyMethod (arg1, arg2).
nlawalker

4

Birçok dilde önek, infix ve hatta postfix karışımı kullanılır.

Lisp varsayılan olarak yalnızca önek kullanır. Eğer sin (x) matematikten sezgiselse, (sin x) çok uzak değildir. Hareket (köpek, ev) geleneksel bir prosedür çağrısı ise, o zaman Lisp'de sadece (köpeği eve taşı).

Lisp matematik için bir istisna oluşturmaz ve +, -, * ve sıradan işlev çağrıları gibi diğerlerine davranır.


2

"Sonunda)" Her şey bir işlev çağrısıdır "(veya her ikisi de" işlev çağrısı "nın yüzey sözdizimine sahip özel bir form veya makro genişletme) tıklandığında, oldukça doğal hissettim.

Bu yüzden, (= 1 2)'1 ve 2'deki sayısal eşit karşılaştırmayı çağırın' olarak okudum.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.