Ben şu işlevi tanımı yapmaya çalıştı AncakBu nokta neden ücretsiz tanım Haskell'de çalışmıyor?</p> <pre><code>relativelyPrime x y = gcd x y == 1 </code></pre> <p>noktası içermeyen:
relativelyPrime = (== 1) . gcd
, bu bana aşağıdaki hata veriyor:
Couldn't match type ‘Bool’ with ‘a -> Bool’
Expected type: (a -> a) -> a -> Bool
Actual type: (a -> a) -> Bool
Relevant bindings include
relativelyPrime :: a -> a -> Bool (bound at 1.hs:20:1)
In the first argument of ‘(.)’, namely ‘(== 1)’
In the expression: (== 1) . gcd
In an equation for ‘relativelyPrime’:
relativelyPrime = (== 1) . gcd
yapmam oldukça anlama. gcd
iki Ints/Integer alır, bir Ints/Integer döndürür, sonra Int/Integer eşittir '1' için kontrol edilir. Hatamın nerede olduğunu göremiyorum.
iyi 'başka bir fonksiyon var üretecek gcd' sadece bir argüman verilirse - ve Noktadan içinde ücretsiz sürümü elinizde bu * function * 'da (== 1) 'hangi fonksiyonların nasıl ele alınacağını bilemezsiniz);) – Carsten
belki ilk * ne zaman * anlayacağınızı anlarsınız * remove *: * relativePrime x = (= = 1). gcd x' bu işe yarıyor!o * * için 'gcd' oruç bağlı olarak Şimdi * kaldırmak *' artık x' olamaz - sen yaparsın (== 1) 'Carsten yorumuna @ $ gcd x' – Carsten
doğrudur olsaydı. Bir seçenek, 'uncurry'yi' gcd'yi tek argüman fonksiyonuna çevirmek (iki tamsayıda bir tuple alarak) kullanmaktır. – psmears