LINUX.ORG.RU

haskell


0

0

есть программка

new_x = [ x | x <- [1..], x<10]
main = print(new_x)

как я понимаю, она должна напечатать список от 1 до 9. Висит. Как объяснить? (сильно не пинать, второй день про существование функциональных языков знаю))


Re: haskell

Ну а что еще должна сделать функция, когда ей сказано перебрать все числа и вернуть из них те, которые меньше 10?

mo3r ()
Ответ на: Re: haskell от mo3r

Re: haskell

подумать вместо меня... и выдать все те, что меньше 10 )) В общем, понял. Не понял только, зачем нужны в хаскеле бесконечные списки, если на них все равно вот такая вот фигня происходит

fizteh ()
Ответ на: Re: haskell от fizteh

Re: haskell

>Не понял только, зачем нужны в хаскеле бесконечные списки

ровно для тех же целей, как и бесконечные структуры в других языках

Pi ★★★★★ ()
Ответ на: Re: haskell от Pi

Re: haskell

def is_prime(n):
    return not any(n % k == 0 for k in xrange(2,n))

print is_prime(2)
print is_prime(3)
print is_prime(5)
print is_prime(7)
print is_prime(9)

True
True
True
True
False

Pi ★★★★★ ()
Ответ на: Re: haskell от fizteh

Re: haskell

> Не понял только, зачем нужны в хаскеле бесконечные списки, если на них все равно вот такая вот фигня происходит

factorials = 1 : zipWith (*) [1..] factorials

Простейший пример. Зачем его обрубать на каком-то элементе? Пусть компилятор это сделает сам.

Miguel ★★★★★ ()

Re: haskell

newX = takeWhile (\x -> x < 10) [1..]

main = print newX

Miguel ★★★★★ ()
Ответ на: Re: haskell от Miguel

Re: haskell

main = takeWhile (<10) [1..]

imp ★★ ()
Ответ на: Re: haskell от imp

Re: haskell

>main = takeWhile (<10) [1..]

поработаю lambdabot'ом:

main :: IO ()
takeWhile (<10) [1..] :: (Enum a, Ord a, Num a) => [a]

типы, соответственно, не совпадают
чтобы исправить этот момент, нужна функция типа [a] -> IO ()
уже упоминавшийся print:

print :: (Show a) => a -> IO ()

если a принадлежит классу Show, то и [a] тоже принадлежит классу Show
соотвественно:

print [1..9] :: IO ()

итого искомая функция будет выглядеть так:

main = print $ takeWhile (<10) [1..]

P.S. писался этот ответ прежде всего для топикстартера

jtootf ★★★★★ ()
Ответ на: Re: haskell от jtootf

Re: haskell

>P.S. писался этот ответ прежде всего для топикстартера

Сам хотел исправить да забил...

imp ★★ ()
Ответ на: Re: haskell от imp

Re: haskell

>Сам хотел исправить да забил...

да я понял, просто чтобы спрашивающего не запутать окончательно расписал всё :)

jtootf ★★★★★ ()
Ответ на: Re: haskell от jtootf

Re: haskell

Если расписывать ВСЁ, то надо ещё не забыть про функцию ($) :: (a -> b) -> a -> b

Miguel ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.