私はEratosthenes篩の定義をIdrisに翻訳するのに苦労しています。ここでの機能は、これまでのところです:エラトステネス篩をIdrisで実装する
%default total
eratos : Nat -> (l : List Nat) -> { auto ok: NonEmpty l } -> List Nat
eratos limit (prime :: rest) =
if prime * prime > limit -- if we've passed the square root of n
then prime :: xs -- then we're done!
-- otherwise, subtract the multiples of that prime and recurse
else prime :: (eratos limit (rest \\ [prime^2,prime^2+prime..limit]))
main : IO()
main = printLn $ eratos [2..100]
は、残念ながら、私は奇妙なコンパイラエラーを取得しています:
idris --build euler.ipkg
./E003.idr:18:18: error: expected: ")",
dependent type signature
else prime :: (eratos n (xs \\ [prime^2,prime^2+prime..n]))
はなぜコンパイラは型シグネチャを探していますか?
'(^)'関数はありません。 –