LINUX.ORG.RU

История изменений

Исправление MOPKOBKA, (текущая версия) :

Что бы выяснить, на скриптухе ты пишешь, или на настоящем языке, я же об этом в посте написал.

Ну если ты хочешь более реального примера, то пусть будут ленивые cons-ячейки, = ленивый список.

def cons(car, cdr):
  return lambda: [car, cdr]

def car(cons):
  if (x := cons()) is None: return None
  else:
    (car, _) = x
    return car

def cdr(cons):
  if (x := cons()) is None: return None
  else:
    (_, cdr) = x
    return cdr

def map(f, l):
  if (x := l()) is None: return None
  else:
    (hd, tl) = x
    return lambda: (f(hd), map(f, tl))

def slow(x):
  print("slow calculation...", x)
  return x * 2

x = cons(1, cons(2, cons(3, cons(4, cons(5, cons(6, None))))))
y = map(slow, x)
car(cdr(cdr(y)))

Вывод

slow calculation... 1
slow calculation... 2
slow calculation... 3
map обработал только те ячейки, которые мы запросили в последней строке, не трогая 4, 5, 6. Применений этому полно!

Исходная версия MOPKOBKA, :

Что бы выяснить, на скриптухе ты пишешь, или на настоящем языке, я же об этом в посте написал.

Ну если ты хочешь более реального примера, то пусть будут ленивые cons-ячейки, = ленивый список.

def cons(car, cdr):
  return lambda: [car, cdr]

def car(cons):
  if (x := cons()) is None: return None
  else:
    (car, _) = x
    return car

def cdr(cons):
  if (x := cons()) is None: return None
  else:
    (_, cdr) = x
    return cdr

def map(f, l):
  if (x := l()) is None: return None
  else:
    (hd, tl) = x
    return lambda: (f(hd), map(f, tl))

def slow(x):
  print("slow calculation...", x)
  return x * 2

x = cons(1, cons(2, cons(3, cons(4, cons(5, cons(6, None))))))
y = map(slow, x)
car(cdr(cdr(y)))

Вывод

slow calculation... 1
slow calculation... 2
slow calculation... 3
map обработал только те ячейки, которые мы запросили в последней строке, не трогая 4, 5, 6.