[F#] Seq.exists , что я делаю не так
От: cadet354 Россия
Дата: 21.09.09 08:11
Оценка:
Доброго времени, взялся за изучение F#, так что вопрос новичка:
функция определяет простое ли число
let  isPrime64 value:int64 =
    let isqrt64 n:int64 = n |> float |> sqrt |> int64 // определение верхней границы
    seq { for a in 2L .. isqrt64 value do yield a} |> Seq.exists(fun checker -> value % checker = 0L)|>not 
// не компилируется, ошибка такая:
error FS0001: Type mismatch. Expecting a
    bool -> int64
but given a
    bool -> bool.
The type 'int64' does not match the type 'bool'

почему Expecting a bool -> int64 ,
ведь exists возвращает bool.
... << RSDN@Home 1.2.0 alpha 4 rev. 1231>>
Re: [F#] Seq.exists , что я делаю не так
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 21.09.09 08:37
Оценка: 4 (1) +1 -1
Здравствуйте, cadet354, Вы писали:

C>Доброго времени, взялся за изучение F#, так что вопрос новичка:

C>функция определяет простое ли число
C>
C>let  isPrime64 (value:int64) = //обязательно поставить скобки иначе будет считать что int64 - тип возвращаемого значения
C>    let isqrt64 n:int64 = n |> float |> sqrt |> int64 // определение верхней границы
C>    seq { for a in 2L .. isqrt64 value do yield a} |> Seq.exists(fun checker -> value % checker = 0L)|>not 
C>


А лучше написать так:

let  isPrime64 value =
    let isqrt64 n:int64 = n |> float |> sqrt |> int64 // определение верхней границы
    seq { for a in 2L .. isqrt64 value do yield a} 
    |> Seq.forall(fun checker -> value % checker <> 0L)
Re[2]: [F#] Seq.exists , что я делаю не так
От: cadet354 Россия
Дата: 21.09.09 09:17
Оценка:
Здравствуйте, gandjustas, Вы писали:


G>А лучше написать так:


G>
G>let  isPrime64 value =
G>    let isqrt64 n:int64 = n |> float |> sqrt |> int64 // определение верхней границы
G>    seq { for a in 2L .. isqrt64 value do yield a} 
G>    |> Seq.forall(fun checker -> value % checker <> 0L)
G>

согласен, так понятнее, но ошибка компиляции остается, причем таже самая.
... << RSDN@Home 1.2.0 alpha 4 rev. 1231>>
Re[3]: [F#] Seq.exists , что я делаю не так
От: gandjustas Россия http://blog.gandjustas.ru/
Дата: 21.09.09 09:23
Оценка:
Здравствуйте, cadet354, Вы писали:

C>Здравствуйте, gandjustas, Вы писали:



G>>А лучше написать так:


G>>
G>>let  isPrime64 value =
G>>    let isqrt64 n:int64 = n |> float |> sqrt |> int64 // определение верхней границы
G>>    seq { for a in 2L .. isqrt64 value do yield a} 
G>>    |> Seq.forall(fun checker -> value % checker <> 0L)
G>>

C>согласен, так понятнее, но ошибка компиляции остается, причем таже самая.
у меня работает...
точно у isPrime64 аннотации нету?
Re[4]: [F#] Seq.exists , что я делаю не так
От: cadet354 Россия
Дата: 21.09.09 10:08
Оценка:
Здравствуйте, gandjustas, Вы писали:

G>точно у isPrime64 аннотации нету?

извини, не увидел твои правки в моем коде
... << RSDN@Home 1.2.0 alpha 4 rev. 1231>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.