14

LearnYouSomeErlang web kitabından Erlang'ı öğreniyorum. Öğrenirken beni etkileyen tek şey, kısa devreli olmayan boolean bağlacı ve ayırıcı operatörlerdi; and ve or. Bu operatörler için kullanım durumları nelerdir? Neden onları andalso ve orelse yerine kullanmak istersiniz?Erlang'da kısa devre yapmayan boolean operatörlerinin kullanımı nedir?

+0

"Mantıksal Programlama" ile etiketlendim çünkü bunun, Prolog'da Erlang'ın kökenleri ile ilgili bir şey olduğu söylendi. – missingfaktor

+0

İlgili: [Güvenlik testlerinde 've' andalso'yu ne zaman tercih edersiniz?] (Http://stackoverflow.com/questions/6025132/when-to-prefer-and-over-andalso-in-guard-tests). – kay

cevap

12

(R13A'ya kadar), andalso ve orelse'un özyinelemediği kuyruktur. Detaylar için bakınız http://www.erlang.org/eeps/eep-0017.html. Ben programında and/or kullanmak için iyi bir neden olduğunu sanmıyorum.

+0

İlginç bağlantı. Cevap için teşekkürler! – missingfaktor

4

ve/veya işleçler çok daha eskidir. Andalso/orelse operatörleri daha sonraki eklemelerdir. Basit bir boolean işlemi gerçekleştirmek istediğinizde ve/veya günümüzde bir kullanım durumu olabilir ve yatay alan, birkaç makine döngüsünden tasarruf etmekten daha önemlidir. Örneğin:

X = Y and (A or B), 

yerine

X = Y andalso (A orelse B), 

daha gözleri biraz daha kolaydır.

Geriye dönük uyumluluk nedeniyle, yalnızca orijinalin davranışını değiştirmek ve/veya kısa devre yapmak mümkün değildi, bu nedenle yeni anahtar kelimeler gerekiyordu. Andalso/orelse isimleri Standart ML'den gelir.

5

farklı şeyler yapıyor olarak görmek ve bu şekilde bunları kullanmak: istediğim

  • and/or olarak mantıksal operatörler mantıksal değerleri karşılaştırmak için. Sıkı oldukları için otomatik olarak tip kontrolü ve KNOW tam olarak ne denir. C.
  • yılında
  • andalso/&& gibi çok kontrol için orelse ve ||

görünce hataları ben idam edildikten bilmek iyidir hissetmek erlang tanımlanan ve nasıl gitti edilir.

+0

1. "andalso" ve "orelse" ayrıca mantıksal işleçler olarak kullanılabilir. 2. Tip kontrolünü anlayamadım. 3. Neyin çağrıldığının bilinmesi, şeffaf biçimde şeffaf ifadelerle önemli olmamalıdır; sadece yan etkiler bağlamında geçerlidir. – missingfaktor

+0

Robert'ın söylediği şey, bazen tüm işlenenlerin değerlendirilmeleri için gerekli olmasalar bile istisnalar oluşturabilmeleri için değerlendirilmelerini istersiniz. Bu iyi bir nokta. – dsmith

+0

@dsmith: Evet, her ikisi de ve aslında boole değerlerini döndürdüklerini kontrol etmek için. Belki aşırı derecede temkinli davranıyorum ama hataları olabildiğince erken yakalamak iyi bir şey. – rvirding