içinde saf işlevleri Algoritmik olarak tanımlamak javascript kullanarak javascript işlevi "saf" olup olmadığını belirlemek mümkün mü?Javascript
bir fonksiyon, her x için, işlev her zaman aynı ilişkili y değerini (yani, bir tek değerli harita) döner anlamda, tahmin edilebilir bir şekilde davranır zaman saf olduğu söylenir. Örneğin
, saf fonksiyonu:
function pure(x) {
return x * x;
}
Ve saf olmayan:
var x = 0;
function impure(y) {
x = x + y;
return x++;
}
o, bir fonksiyonu gibi gibi belirgin değildir impure(0) !== impure(0)
burada söylemek kolay olsa :
var count = 0;
function surprise(x) {
count++;
if (count === 10e10 && x === 0) {
return true;
} else {
return false;
}
}
Bunu sormanın başka bir yolu da, javascript kullanarak javascript işlevinin "impure" olup olmadığını belirlemek mümkün müdür?
Teorik olarak mümkün veya imkansız olabilir, fakat pratik olarak bunu belirlemek için hangi adımları atmaya başlayabiliriz, belki de bir dizi kısıtlama veya varsayımdan bahsedilebilir mi?
Diğer bir saflık tanımı, yerel olmayan değişkenlerin değiştirilemeyeceği uyarısını içerir, ancak ayrı bir sorun olduğunu düşünmek isterim. Bu durumda, tutarlı girdileri tutarlı çıktılarla eşleyen fonksiyonlar düşünmekteyiz.
Teorik olarak? Emin. Pratikte? Fikrim yok. Birisi böyle bir şey yapmak için bir ayrıştırıcı yazmış olabilir. Bir ayrıştırma ağacı oluşturun, kesin olmayan şeyleri * bilinen * işaretleyin (örn. Math.random() '), sonra yolunuzu çalışın. Birisinin bunu yapmak için bir araç yazıp yazmadığını görmek ilginç olurdu. – thetoast
Bu, işlevin kaynak koduna bakmadan belirlenip belirlenemeyeceğini soruyor musunuz? Ya da hangi girişlere izin verilir? Kesinlikle bir kişi, kodu inceleyebilir ve uygunsuz davranışlara sahip olabileceği herhangi bir koşul olup olmadığını belirleyebilir. Yani, bir bilgisayarın size bunu söylemek için kod üzerinde çalışıp çalışamayacağını mı soruyorsunuz? – jfriend00
İlgili: http://programmers.stackexchange.com/questions/176761/compute-if-a-function-is-pure - nutshell sürümü, bunu yapmak için durma sorunu çözmek zorunda. – jdphenix