Python console session
28 Dec 2010
 

[09:15:59 PM] Typhon: если бы у фейсбука была кнопка "да вы ебанулись", я бы сейчас нажал

 
 
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
"""
[06:44:14 PM] nmk: как бы это сделать почеловечески? :)
reduce(lambda x, y: os.path.dirname(x), [__file__] * 3)
типа 3 раза надо выполнить os.path.dirname
[07:20:14 PM] piranha: dn = os.path.dirname
dn(dn(dn(__file__)))
[07:25:01 PM] cutwater: омг
[07:25:50 PM] nmk: piranha: :)
[07:27:13 PM] piranha: nmk: ну а чо выкаблучиваться, реально? :)
[07:27:33 PM] nmk: да я думал мож что стандартное есть
[07:35:46 PM] mishok13: ага, y combinator
[07:38:27 PM] nmk: combinator?
[07:38:57 PM] mishok13: он самый
[07:39:05 PM] mishok13: через него выражаешь нюмерал чёрча три
[07:39:17 PM] mishok13: и вот ему уже передаешь нужную тебе лямбду
[07:39:22 PM] mishok13: по-моему, гениально
[07:39:35 PM] nmk: что такое combinator? :)
[07:40:51 PM] mishok13: http://en.wikipedia.org/wiki/Fixed_point_combinator
"""
>>> Z = lambda f: (lambda x: f(lambda *args: x(x)(*args)))(lambda x: f(lambda *args: x(x)(*args))) # teh Combinator
# church numerals generator: http://en.wikipedia.org/wiki/Eta_expansion#Arithmetic_in_lambda_calculus
>>> church = Z(lambda step: lambda order, lower, numeral=lambda x:x: pprint(order) or step(order-1, lower, lambda x:pprint(order) or numeral(lower(x))) if order else pprint('stop') or numeral)
>>> import os.path.dirname
>>> path = '/home/wiz/Video/pr0n/whatever'
>>> print church(3, os.path.dirname)(path)
3
2
1
'stop'
1
2
3
/home/wiz
>>> Also(26k).get()
'lol ok'