LINUX.ORG.RU

Бесконечные последовательности в Scala

 , ,


0

3

Собственно такой вопрос: делаю в Хаскелле

Prelude> let infList = 1 : infList
Prelude> take 3 infList 
[1,1,1]
, делаю в Scala
lazy val infList : List[Int] = 1 :: infList
infList: List[Int] = <lazy>
infList.take(2)

Получаю вывод:

at .infList(<console>:7)
	at .infList(<console>:7)
	at .infList(<console>:7)
	at .infList(<console>:7)
	at .infList(<console>:7)
	at .infList(<console>:7)
	at .infList(<console>:7)
	at .infList(<console>:7)
	at .infList(<console>:7)
	at .infList(<console>:7)

Как мне добиться того же поведения, что и у Haskell?

LongLiveUbuntu
LongLiveUbuntu
LongLiveUbuntu
LongLiveUbuntu
LongLiveUbuntu
LongLiveUbuntu
LongLiveUbuntu

haskell
haskell
haskell
haskell
haskell
haskell
haskell

C-C-C-COMBO BREAKER!

anonymous ()
Ответ на: комментарий от anonymous

Джаверы переходят на функциональщину. У Куки будет инфаркт.

anonymous ()
Ответ на: комментарий от LongLiveUbuntu
scala> def from(v: Int): Stream[Int] = v #:: from(v + 1)
from: (v: Int)Stream[Int]

scala> from(0).take(10).toList
res11: List[Int] = List(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
maxcom ★★★★★ ()
scala> val infList: Stream[Int] = 1 #:: infList
scala> infList take 3 toList
stateofart ()
Ответ на: комментарий от maxcom

Спасибо.

Однако был удручен отсутствием настоящей ленивости в Scala из коробки.

LongLiveUbuntu ★★★★★ ()
Ответ на: комментарий от LongLiveUbuntu

А что здесь «ненастоящего»? работает же. просто подход другой чуть

BattleCoder ★★★★★ ()
Последнее исправление: BattleCoder (всего исправлений: 1)
Ответ на: комментарий от LongLiveUbuntu

ну в хаскеле ленивость как бы встроена и от неё никуда не деться... а в скале вот выбор. иногда ведь эта ленивость не нужна и только мешает.

stream для того и придуманы.

советую почитать вот эту книжку http://www.amazon.com/Programming-Scala-Comprehensive-Step-Step/dp/0981531644 и такие вопросы отпадут. там про это в том числе есть.

p.s. вопрос навстречу. а какую книжку посоветуете почитать по хацкелю?

BattleCoder ★★★★★ ()
Ответ на: комментарий от BattleCoder

Да я только что начал его учить по тамошнему оффициальному мануалу.

А как по мне, понравилась книжка Липович «Изучай Хаскелль во имя добра».

Хотя для разработки в свете последних событий все же куда больше подойдет Скала, ИМХО.

LongLiveUbuntu ★★★★★ ()
Ответ на: комментарий от LongLiveUbuntu

Каких событий?

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

BattleCoder ★★★★★ ()
Ответ на: комментарий от BattleCoder

Скала более щадяща для моих мозгов, с другой стороны ее функциональщины мне вполне хватает.

LongLiveUbuntu ★★★★★ ()
Ответ на: комментарий от BattleCoder

ну в хаскеле ленивость как бы встроена и от неё никуда не деться...

4.2, и пожалуйста так больше не повторяйте.

p.s. вопрос навстречу. а какую книжку посоветуете почитать по хацкелю?

из простых - во имя добра можно почитать, но она достаточно поверхностная.

qnikst ★★★★★ ()
Ответ на: комментарий от qnikst

4.2, и пожалуйста так больше не повторяйте.

ок, короче, «там всё по-другому» =) так лучше?

BattleCoder ★★★★★ ()
Ответ на: комментарий от BattleCoder

да, лучше. хотя не то чтобы все.. но да - по другому.

qnikst ★★★★★ ()
Ответ на: комментарий от BattleCoder

вопрос навстречу. а какую книжку посоветуете почитать по хацкелю?

Я учил по YAHT-у. Подозреваю, что он, хотя и старый как это самое, но всё ещё актуальный.

Рекомендуют RWH, но сам не читал.

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