2011-12-13 14 views
24

Scala, normalde güçlü bir şekilde normalleştirildiği söylenen System F ω temelli bir sistem kullanır. Kesinlikle normalleştirme, Turing olmayan bütünlüğü ifade eder.Scala'nın tip sisteminin hangi özelliği Turing-complete?

Yine de, Scala'nın tip sistemi Turing-complete'dir.

Hangi değişiklikler/eklemeler/değişiklikler Scala'nın tür sistemi Turing-complete'i, resmi algoritma ve sistemlerle karşılaştırıldığında yapar?

+4

Bağlantılar/referanslar var mı? (İzleyiciler için, benim gibi :-) –

+7

Sistem F'nin güçlü bir şekilde normalleştirilmesi, Sistem F'nin Turing'in tamamlanmadığını ima eder. Bu tip sisteminin olmadığı anlamına gelmez. Ve aslında, [kısıtlanmamış bir Sistem F'nin yazılmasının kararsız olduğu] gösterilmiştir (http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.6.6483) – sepp2k

+0

@ sepp2k - yikes, Turing-tamlığı hakkında en kötü şey ve bunu başardı. – Malvolio

cevap

4

Bu kapsamlı bir yanıt değil, bunun nedeni, özyinel türlerini tanımlamanızdır.

Daha önce benzer soruları sordum (about what a non-Turing complete language might look like). Cevaplar şu şekildeydi: a Turing'in tam bir dili, rastgele döngü veya yineleme'u desteklemelidir. Scala'nın yazı sistemi sistemi destekler.

+3

Özyinelemeli Java ve Pascal dahil olmak üzere çoğu dilde tür vardır. Kendisine atıfta bulunan herhangi bir tür (bağlantılı bir liste gibi) özdir. Tür uygulaması gibi, tür düzeyinde hesaplama yapmanın bir yoluna ihtiyacınız vardır. Scala'da, tür takma adlarında tip üyeleri ve kısmi tip uygulama var. –

+2

http://apocalisp.wordpress.com/2010/06/08/type-level-programming-in-scala/ "type" kullanılarak değil, class sınıfını kullanarak veya http: trait'. Bu bağlamda oldukça açık olduğunu düşündüm. Söylediğim gibi, turing bütünlüğü hakkında bana söylendiğim yankıyı ekliyorum. –

+1

[Recursive types] (http://en.wikipedia.org/wiki/Recursive_data_type), söylediğiniz sayıları kodlamak için kullanılabilir, ancak Turing bütünlüğü için yeterli değildir. İstediğiniz, hesaplamanın bir yoludur, bu durumda tip uygulamasını kullanarak (ki bunun yerine ikame kullanır). Java, jenerikler için benzer sübstitüsyonlar gerçekleştirse de, Scala'nın tip üyeleri bunu biraz kolaylaştırır. –