12 puan yazan ohyecloudy 2023-12-17 | 3 yorum | WhatsApp'ta paylaş
  • Boş bir liste için Enum.all? fonksiyonunun dönüş değeri true
    • Haskell'deki all, Python'daki all, Clojure'daki every? fonksiyonları da aynı şekilde çalışır
  • Boş bir liste için true döndürmek uygulamayı kolaylaştırır
    • true && f(elem1) && f(elem2) ...
    • Ancak bunun böyle uygulanmasının nedeni uygulama kolaylığı değildir
    • Mantıktaki vacuous truth tanımına uygun olacak şekilde uygulanmıştır
  • Vacuous truth'ü anlamak için maddi koşullu önermeye bakmak gerekir
    • p yanlışsa p → q her zaman doğrudur
    • “Özgürlük Heykeli Seul'deyse Eyfel Kulesi de Pohang'dadır” ifadesi doğrudur
      • Çünkü p olan “Özgürlük Heykeli Seul'dedir” ifadesi yanlıştır
    • Böyle maddi koşullu önermelerde p yanlış olduğu için ifadenin koşulsuz doğru olmasına vacuous truth denir
  • Vacuous truth'te boş küme (set) için her önerme doğru kabul edilir
    • Örnek olarak 'odadaki tüm cep telefonları kapalıdır' ifadesini ele alalım
    • x odadaki tüm şeylerdir
    • P(x), 'x bir cep telefonudur'
    • Q(x), 'x kapalıdır'
    • x boş olduğu için P(x) yanlıştır. Vacuous truth nedeniyle ifade her zaman doğru olur.
  • Bu yüzden boş bir liste için Enum.all? fonksiyonunun dönüş değeri true olur.

3 yorum

 
tapu1125 2023-12-18

Öğrenmiş oldum haha, paylaştığınız için teşekkürler.
Matematiksel ve bilgisayar bilimi açısından yaklaşım böyle olsa da, kod yazarken kafa karıştırdığı için kullanmamak daha iyi gibi görünüyor haha.
Özellikle if ifadelerinde boş liste False olarak algılandığı için çok karışıyor.

Python açısından aşağıdaki gibidir.
all([]) == True
all([[]]) == False

 
p0rygon 2023-12-18

Bu yüzden, kodu okuyacak kişi için koşulları açıkça yazmayı tercih ediyorum.
if not arr: yerine if len(arr) == 0: gibi.
if not flag: yerine if flag is False: gibi bir örnek de verilebilir.

Benim ölçütüme göre all([[]]) yerine bunu all([koşul ifadesi for ... in []]) olarak yeniden yazmak, kodun daha okunaklı olmasını sağlar.

 
ohyecloudy 2023-12-18

Ah~ demek ki Python'da boş liste falsy bir değer olduğu için all([[]]) dönüş değeri False oluyormuş. Diller arasında Truthy, Falsy değerler farklı olduğu için başka bir dil kullanırken ara sıra hata yapıyorum. :)

Bu arada Elixir'de yalnızca nil veya false Falsy değerler olduğu için Enum.all?([[]]) değeri true çıkıyor.