LINUX.ORG.RU

CLPython - lisp реализация языка Python


0

0

Большая часть возможностей языка (основные типы данных, функции, классы, метаклассы, замыкания, генераторы) уже реализованы.
>>> def fact(n):
... if n <= 1:
... return 1
... else:
... return n * fact(n-1)
...
#<python-function fact @ #x71d67c9a>
>>> fact(6)
720
>>> :q
Bye

>>> Подробности



Проверено: Shaman007 ()

там хвостовая рекурсия оптимизируется или нет?

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

>ну и нафига оно надо?

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

Sun-ch
() автор топика
Ответ на: комментарий от Sun-ch

> Ты погляди внимательно на текст новости, теперь проги на пистоне можно писать без этих идиотских отступов, которые меня всегда бесили.

В цитатник..

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

Надо было в preformatted новость загонять

Lumi ★★★★★
()

максимум писать на перле. Но пистон зачем сдался?

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

Ага, давай но только со всеми фичами, типа макро, CLOS, MOP и тд.

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

...читай как здесь: "Чтобы понять рекурсию надо понять рекурсию"

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

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

Что и сказать, сильный аргумент. И конечно, ради этого стоит делать своою реализацию Python.

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

ещё вроде как в PyPy есть CommonLisp-backend, непонятно только насколько он рабочий

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

>Удивлён выбором диалекта.

Почему, ACL - самая лучшая реализация CL в мире.

Sun-ch
() автор топика
Ответ на: комментарий от gtbear

> ну и нафига оно надо?

ну так, наверняка, они машинный код генерят. А нативный python, как я понимаю - всего лишь интерпретатор?

asko
()
Ответ на: комментарий от Sun-ch

>>наслаждайся http://www.ibiblio.org/obp/py4fun/

>Фигня, имхо, даже на курсовик не потянет.

ну никто и не утверждал, что это полноценная реализация

зато на приличную лабу вполне потянет :)

зы: брось, у нас в универе в качестве курсовиков такое Г здавали, причем кода там на пару страниц

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

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

Шутник, однако. В оригинале, отступы есть. Или у интерпретатора какая-то продвинутая эвристика, чтобы оперелять, где начинается и кончается блок?

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

>А нативный python, как я понимаю - всего лишь интерпретатор?

Разве? А ну теперь я понимаю, почему мне целый час доказывали, что пых-пых рвет его как тузек грелку.

Sun-ch
() автор топика
Ответ на: комментарий от Sun-ch

> Фигня, имхо, даже на курсовик не потянет.

По той ссылке, которую запостил ты, вместо сайта разработчика, вообще ничего нет, даже работающей ссылки на оригинал. Так что, это не тянет даже на лабораторную работу пока :)

watashiwa_daredeska ★★★★
()
Ответ на: комментарий от Sun-ch

Дак а нафига ж они выложили-то дуроки сорцы? Майкрософт ведь бдит ;)

mutable
()

Ёще один язык программирования для OS GNU Emacs. Да здравствует Столлман!!!

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

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

>Шутник, однако. В оригинале, отступы есть. Или у интерпретатора какая-то продвинутая эвристика, чтобы оперелять, где начинается и кончается блок?

Вот за эти отступы Пытон и уполз 3 или 4 года назад в биореактор. Perl forever!!!!

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

> Вот за эти отступы Пытон и уполз 3 или 4 года назад в биореактор. Perl forever!!!!

Perl foreva за реальную перловку. Не менее 80 символов на строку!!! - вот на дефиз!!! Дайошъ прямоугольные исходники!!! Неровные углы у сорца? - В биореактор!!!

Здраво, однако

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

> тогда вот http://www.biostat.wisc.edu/~annis/creations/PyLisp/

На самом деле, я это говорил Sub-ch'у, который запостил в новости ссиылку на какой-то задрипанный блог, на котором есть ссылка на неработающий якобы сайт разработчика.

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

>Что и сказать, сильный аргумент. И конечно, ради этого стоит делать своою реализацию Python.

не просто сильный, а ГЛАВНЫЙ

Led ★★★☆☆
()
Ответ на: комментарий от Sun-ch

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

а мне нравятся! к стати "пистон" в этом (использование отступов) не одинок хаскелевы лейауты из той же оперы, и надо сказать, что в хаскеле этот стиль (с отступами) очень популярен (и рекомендован к использованию). так чта гражданин атсасите!

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

>хаскелевы лейауты из той же оперы, и надо сказать, что в хаскеле этот стиль (с отступами) очень популярен (и рекомендован к использованию).

"Один из стилей" (в хаскеле) и "единственно возможный" (в пайтоне) - бедному анонимному гуманитарию, конечно же, не под силу уловить разницу:)

>так чта гражданин атсасите!

астсасывают обычно анонимусы (по причине недостатка образования):)

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

http://trac.common-lisp.net/clpython/ почему-то отвалился, но там было написано, что ACL выбран из-за местного yacc. Почитай исходники, там всякие defgrammar торчат...

Там ещё было сказано в том смысле, что Allegro CL требуется _пока_. То есть я так понял есть планы то ли реализовать yacc, чтобы он был доступен и в других CL, то ли переписать без него. Наверное скорее первое.

Teak ★★★★★
()
Ответ на: комментарий от Sun-ch

> А ну теперь я понимаю, почему мне целый час доказывали, что пых-пых рвет его как тузек грелку

гы гы ...
да тебя жестоко обманули по обоим пунктам:
1. Нативный python - это не "всего лишь" интерпретатор. Например рекомендуется задуматься о назначении расширений .py, .pyc и .pyo
2. Никакой пых пых по скорости с питоном и рядом не валялся.

Пример fact(100):
time php fact.php
9.3326215443944E+157
real 0m0.081s
user 0m0.056s
sys 0m0.016s


time python fact.py
93326215443944152681699238856266700490715968264381621468592963895217599993229915 608941463976156518286253697920827223758251185210916864000000000000000000000000

real 0m0.054s
user 0m0.036s
sys 0m0.012s

n-tony
()
Ответ на: комментарий от n-tony

Я бы сказал, обе цифры в пределах погрешности такого рода измерений. :) Да и не сильно друг от друга отличаются. И вообще смотреть надо... Короче на бенчмарк не тянет никак.

Teak ★★★★★
()
Ответ на: комментарий от n-tony

Прикольно, что предыдущий результат был получен на python 2.3, а вот на 2.4 еще веселее:
time python2.4 fact.py
93326215443944152681699238856266700490715968264381621468592963895217599993229915 608941463976156518286253697920827223758251185210916864000000000000000000000000

real 0m0.034s
user 0m0.028s
sys 0m0.004s

Это уже по сравнению с php в 2,5 раза разница.
PHP использовался 4.4.2

n-tony
()
Ответ на: комментарий от n-tony

Но надо сказать что в последнем пыхпыхе над скоростью тоже поработали:

time ../builds/php5.1.4/out/cli/php fact.php
9.3326215443944E+157
real 0m0.047s
user 0m0.024s
sys 0m0.016s

Однако змея все равно впереди :)

n-tony
()
Ответ на: комментарий от Teak

Teak, методика измерений была такая: каждый вариант запускался по 5 раз и бралось лучшее время. Так что погрешность измерений тут не так уж и высока

n-tony
()
Ответ на: комментарий от n-tony

sco@solo:/tmp$ cat > fact.py
fact = lambda n: n<=1 and 1 or n*fact(n-1)
print fact(100)

sco@solo:/tmp$ cat > pass.py
pass

sco@solo:/tmp$ time python fact.py
93326215443944152681699238856266700490715968264381621468592963895217599993229915 608941463976156518286253697920827223758251185210916864000000000000000000000000

real 0m0.060s
user 0m0.036s
sys 0m0.024s
sco@solo:/tmp$ time python fact.py
93326215443944152681699238856266700490715968264381621468592963895217599993229915 608941463976156518286253697920827223758251185210916864000000000000000000000000

real 0m0.059s
user 0m0.044s
sys 0m0.016s
sco@solo:/tmp$ time python pass.py

real 0m0.058s
user 0m0.048s
sys 0m0.012s
sco@solo:/tmp$ time python pass.py

real 0m0.057s
user 0m0.044s
sys 0m0.016s

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

Ок, парни, раз вы настаиваете: модифицируем обе проги чтобы fact(100) выполнялось в цикле 10000 раз. Получаем:

time python2.4 fact.py

real 0m1.588s
user 0m1.544s
sys 0m0.040s


time ../builds/php5.1.4/out/cli/php fact.php

real 0m2.124s
user 0m2.084s
sys 0m0.036s

Ну и ради смеха php4.4.2, который на текущий момент наиболее популярен у хостеров:
time ../builds/php4.4.2/out/cli/php fact.php

real 0m3.069s
user 0m2.944s
sys 0m0.116s

n-tony
()
Ответ на: комментарий от n-tony

SBCL 0.9.13:

(defun fact (n) (if (<= n 1) 1 (* n (fact (1- n)))))

(time (dotimes (g 10000) (fact 100)))
Evaluation took:
0.179 seconds of real time
0.170974 seconds of user run time
0.007999 seconds of system run time
0 page faults and
38,640,048 bytes consed.
NIL

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

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

P.S. я запускал на ноутбуке с Celeron-M 1.6 Ghz, 256 Mb RAM, kernel 2.6.16.12, Debian Sarge, KDE (konsole)

n-tony
()
Ответ на: комментарий от ugoday

PHP vs. Python это банально и неинтересно.

зато вот такой код: fib = lambda n: n<=2 and 1 or (fib(n-2) + fib(n-1))

у меня под python-2.4 и под этим самым CLPython работает примерно с одинаковой скоростью -- fib(36) вычисляется за 68-70 сек.

при этом объём кода CLPython меньше на порядок

scotinomys
()
Ответ на: комментарий от n-tony

В CPython:
>>> from time import clock
>>> def fact(n):
	if n <= 1:
		return 1
	else:
		return n * fact(n-1)
>>> def test():
	beg = clock()
	x = xrange(10000)
	for i in x: fact(100)
	print clock() - beg
>>> test()
1.13079315947

В CLPython:
>>> def fact(n):
...   if n <= 1:
...     return 1
...   else:
...     return n * fact(n-1)
... 
#<python-function fact @ #x2140e412>
>>> def test():
...   x = xrange(10000)
...   for i in x: fact(100)
... 
; While compiling test:
Warning: Variable i is never used.
#<python-function test @ #x21440c82>
>>> time(test)
; cpu time (non-gc) 1,011 msec user, 0 msec system
; cpu time (gc)     30 msec user, 0 msec system
; cpu time (total)  1,041 msec user, 0 msec system
; real time  1,042 msec
; space allocation:
;  5 cons cells, 45,440,176 other bytes, 0 static bytesNone

в обоих случаях - выбрал лучший из 5 замеров

Как видите CLPython быстрее, хоть и не намного!!!

PS: если хотите померять сами:

в builins.cl вставить:
(defun pybf:time (f) (time (py-call f)))

в package.cl в секции :export добавить :time

PPS: моя AMD Athlon XP 1800

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