воскресенье, 9 октября 2011 г.

Очистка %TEMP% в один клик на python

Небольшой скриптик на питоне, позволяющий быстро высвободить немного места на системном диске путем подчистки временных файлов. Применяю его под Windows, но, наверное, и под *nix должен идти.

import os, stat
import tempfile

def cln(d):
for f in os.listdir(d):
remove_path = '%s/%s' % (d, f)

print 'Removing:', remove_path,

if os.path.isdir(remove_path):
cln(remove_path)

try:
os.chmod(remove_path, stat.S_IRWXU | stat.S_IRWXG | stat.S_IRWXO)
os.unlink(remove_path)
except OSError, e:
print 'FAIL\n',e
else:
print 'DONE'
cln(tempfile.gettempdir())

пятница, 13 мая 2011 г.

Y-Combinator in mercury


:- module y2.

:- interface.

:- import_module io.

:- pred main(io::di, io::uo) is det.

:- implementation.

:- import_module int.

:- type mu(A) ---> roll(unroll :: (func(mu(A)) = A)).

y(F) = F1(roll(F1)) :- F1 = (func(X) = (func(A) = F(unroll(X)(X))(A))).

y_fac = y(func(F) = (func(N) = (N =< 0 -> 1; N * F(N-1)))).
y_fib = y(func(F) = (func(N) = (N < 2 -> N; F(N-1) + F(N-2)))).

main -->
write_int((y_fac)(10)), % 3628800
nl,
write_int((y_fib)(10)). % 55


Compile & run:


>mmc --infer-all y2
y2.m:015: Inferred :- func y(((func ((func V_2) = V_1)) = ((func V_2) = V_1)))
y2.m:015: = ((func V_2) = V_1).
y2.m:017: Inferred :- func y_fac = ((func int) = int).
y2.m:018: Inferred :- func y_fib = ((func int) = int).

>y2
3628800
55

Solution is based on Haskell/OCaml solutions from Rosettacode [2]

Links:

[1] http://en.wikipedia.org/wiki/Fixed_point_combinator
[2] http://rosettacode.org/wiki/Y_combinator