thedeemon: (Default)
[personal profile] thedeemon
Вопрос знатокам и любителям языков с нестрогой семантикой. Вот код на Clean с созданием массива с помощью array comprehension. Сколько раз будет вызвана функция f?

mkarr :: Int -> {#Int}
mkarr n = {tab.[j] - 1 \\ j <-[0..n-1]} where 
  tab :: {#Int}
  tab = {f i \\ i <- [0..n-1]}
  f :: Int -> Int
  f x = x + 5

Start world 
  # arr = mkarr 10000
  = arr.[9000]


Ответ профайлера: код проработал целых 6 секунд, массив tab был создан и собран мусорщиком 10000 раз (400 мегов аллоцировав), функция f вызвана 100 миллионов раз. А чо, чистота, ленивость и referential transparency. :)

Date: 2011-12-07 07:58 am (UTC)
From: [identity profile] nivanych.livejournal.com
> чистота, ленивость и referential transparency

Уже очень давно, как с этими словами ассоциируют Haskell, у которого не так и недавно уже довольно более другой компилятор, чем у Clean.

Date: 2011-12-07 08:59 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Тут просто глюк забавный получился. Типа раз referential transparency, то не только можно вычисление выражения заменить его значением, но и наоборот - значение обратно заменить вычислением. :)

Profile

thedeemon: (Default)
Dmitry Popov

February 2026

S M T W T F S
12 34567
891011121314
15161718192021
22232425262728

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Feb. 3rd, 2026 11:21 pm
Powered by Dreamwidth Studios