Orijinal Soru
Sen yayınlanmıştır:
Prelude> let squareSum list = [result | (x, y, z) <- list, result <- x^2 + y^2 + z^2]
<interactive>:3:5:
Non type-variable argument in the constraint: Num [t]
(Use FlexibleContexts to permit this)
When checking that ‘squareSum’ has the inferred type
squareSum :: forall t. Num [t] => [([t], [t], [t])] -> [t]
Bunun nedeni değerlerin kaynağı olarak kullanmanın, bir liste olmalı hesaplama x^2 + y^2 + z^2
olan çıkarsama geliyor liste anlama (result <- ...
). Ve eğer bu bir liste ise, o zaman matematiksel işleçler liste üzerinden yazılan değerdir, yani başlangıç değişkenleriniz, list
listesinin bir liste listesi olmalıdır ([([t],[t],[t])]
) ve her liste bir şekilde geçerli sayılar olmalıdır (Num [t]
).
Comment Soru
Prelude> let squareSum list = [ x^2 + y^2 + z^2 | (x, y, z) <- list]
Prelude> squareSum [1,2,3]
<interactive>:9:1:
Non type-variable argument in the constraint: Num (t, t, t)
(Use FlexibleContexts to permit this)
When checking that ‘it’ has the inferred type
it :: forall t. (Num t, Num (t, t, t)) => [t]
Şimdi değişken list
dizilerini ((x, y, z) <- list
) içeriyor ama o zaman [1,2,3]
olarak liste tanımlamak söylüyorlar. Her ikisini de tatmin etmek için 1
, 2
ve ve 3
sayısal hazırlıkları, bir sınıf örneğini Num (t, t, t)
tanımladıysanız mümkün olan tuplleri temsil etmelidir.
Sen
Ne İster Carter zaten size çözüm demiştim, ama mantıklı bir listeye geçerli değildi. Bir çözümü tanımlayıp, açık bir tip vermemize ne dersiniz, daha az karışıklık var!
Prelude> :{
Prelude| let squareSum :: [(Int,Int,Int)] -> [Int]
Prelude| squareSum list = [ x^2 + y^2 + z^2 | (x, y, z) <- list]
Prelude| :}
Prelude> squareSum [(1,2,3), (4,5,6)]
[14,77]
Başarı! İki tuple sağladık ve iki Int sonuç elde ettik, yay!
muhtemelen bir * toplamından * sonuç çıkarmayı denediğiniz için * sanırım * sanırım istediğiniz kare kare listesine = [x^2 + y^2 + z^2 | (x, y, z) <- liste] '? – Carsten
Teşekkürler Carsten. Denedim ama yine de aynı sorunla karşı karşıya kaldım. Prelude> let squareSum list = [x^2 + y^2 + z^2 | (X, y, z) <- listesi] Prelüd> squareSum [1, 2, 3]: 33: 1: kısıtlaması olmayan tip değişken bağımsız değişken: Num (t, t, t) (Bu izin vermek için FlexibleContexts kullanın) Bu 'it' denetleniyorsa, türetilmiş tür it :: forall t. (Num t, Num (t, t, t)) => [t] –
Çünkü onu ilk başta tuple ile tanımladığınız şekil olarak adlandırmanız gerekir. [(1,2,3), (4 , 5,6)] ' – Carsten