2011-01-12 17 views
23

:Mantıksal dillerdeki hangi tür sistemler hedef süspansiyonu engelleyebilir? <a href="http://www-ps.informatik.uni-kiel.de/currywiki/documentation/tutorial" rel="nofollow">curry tutorial</a> bölüm 3.13.3 kaynaktan


dar işlemler esnek olarak adlandırılır ise, katı olarak adlandırılır residuate Operasyon. Tüm tanımlanmış işlemler esnektir, ancak aritmetik işlemler gibi çoğu ilkel operasyonlar, tahminler onlar için makul bir seçenek olmadığı için katıdır.

Prelude> x ++ [3,4] =:= [1,2,3,4]  where x free 
Free variables in goal: x 
Result: success 
Bindings: 
x=[1,2] ? 
: operasyon “++” Belirli bir özellik sağlayan bir listesi için arama yapmak için kullanabilir, esnek olduğu için

infixr 5 ++ 
... 
(++)    :: [a] -> [a] -> [a] 
[]  ++ ys = ys 
(x:xs) ++ ys  = x : xs ++ ys 

aşağıdaki gibidir: Örneğin, başlangıç ​​listesi birleştirme işlemi tanımlar

Öte yandan, “+” ekleme gibi önceden tanımlanmış aritmetik işlemler katıdır. Böylece, çağrısı “+” bir mantık değişkenle bir argüman flounders olarak:

Prelude> x + 2 =:= 4 where x free 
Free variables in goal: x 
*** Goal suspended! 

Curry askıya alınacak yazı hedeflerine karşı korumak için görünmüyor. Bir hedefin askıya alınmaya devam edip etmeyeceği önceden hangi sistemleri önceden algılayabilir?

+5

IMO, bu tür bir soru, tür sistemlerdeki uzmanlar (belki de, http://cstheory.stackexchange.com adresinde) veya Curry uzmanları (posta listelerinde) tarafından daha önce yanıtlanabilir. –

cevap

3

Belirli bir girdi kümesi için hangi çıktıların kullanılabilir olacağını genellikle denetleyen mod denetimi gibi sesleri anlattığınız şey. Mod kontrolünü oldukça ciddiye alan Mercury dilini kontrol etmek isteyebilirsiniz.