thedeemon: (Default)
[personal profile] thedeemon
Питер Норвиг зачем-то написал на Питоне интерпретатор небольшого подмножества Схемы в 90 строк кода. Дабы слегка посрамить этот гадкий питон, я перевел Норвиговский интерпретатор на Руби и заодно добавил туда поддержку продолжений, важной фичи Схемы, которую в питоний интепретатор должно быть вставить заметно сложнее. Такой вот пример
(begin
 (define fact (lambda (n) 
  (if (<= n 1) 1 (* n (fact (- n 1))))))
 
 (define f (lambda (return)
   (begin
    (return 2)
    1)))

 (display (f (lambda (x) x)))
 (display (callcc f))
 (fact 5)
)

выдает 1, 2, 120. Здесь return - не конструкция языка, а имя переменной, получающей текущее продолжение.
Выложил здесь.

Получилось всего 60 строк. Let the срачь begin! ;)

Date: 2010-10-04 08:19 pm (UTC)
From: [identity profile] theiced.livejournal.com
клёво ;) минут 5 разбирался как оно работает :)

Date: 2010-10-04 10:10 pm (UTC)
From: [identity profile] zahardzhan.github.com (from livejournal.com)
Запиши таблицу в add_globals не по-уебански - и получатся те-же 90 строк. К тому же у Норвига не было однострочников в коде.

Date: 2010-10-05 02:21 am (UTC)
From: [identity profile] thedeemon.livejournal.com
В оригинале такая же уебанская add_globals и куча лямбд-однострочников, так что мимо кассы.
(deleted comment)

Date: 2010-10-06 02:09 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Почему у вас апач старый

Когда-то давно админы его патчили под свои нужды хостинга. Возможно, там еще та патченная версия, а может уже другая, просто давно не обновлявшаяся.

И почему это питон гадкий?

Так вышло, что с Руби я познакомился раньше, и на его фоне Питон выглядит ограниченным неконсистентным набором хаков. В объектно-ориентированном языке длина строки это s.length, а не length(s), отсортированный массив это a.sort, а не sorted(a). Еще эти вездесущие __подчеркивания. И синтаксис завязанный на отступы, причем даже это сделано наихудшим образом (сравни с Haskell). И фиговые лямбды.
Руби, на мой взгляд, намного более красивый и консистентный язык. С очень гибким синтаксисом (хорошо для DSLей), хорошим ООП и метапрограммированием.
(deleted comment)

Date: 2010-10-06 04:44 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Да, классический интерпретатор Руби (1.8) довольно тормозной. Сейчас есть 1.9, там новый движок, он пошустрее, но, например, тех же продолжений там уже нет. Есть еще jruby, совместимый с 1.8, он по скорости как Перл и РНР, т.е. пошустрее обычного Руби, но все еще медленнее Питона.

В любом случае, я считаю, что вопрос скорости в сравнении Руби и Питона не имеет значения, т.к. там где вообще встает вопрос скорости им обоим не место. Хороший пример:
http://users.livejournal.com/_winnie/254903.html

Книги:
Классика жанра - Programming Ruby из серии Pragmatic Programmers, автор Dave Thomas. К ней можно добавить Ruby Cookbook by Lucas Carlson, Leonard Richardson. В принципе, достаточно начать первую, поставить себе ruby и запустить fxri - это repl с интерактивной документацией по всем классам и методам, незаменимая вещь, которой так не хватает очень многим другим языкам.
Есть еще знаменитая сумасшедшая книжка why's poignant guide to ruby, но я ее не смог читать, количество шизы сильно превысило количество полезной информации. :) Но посмотреть на нее определенно стоит, это культурный артефакт.

Date: 2014-12-08 07:43 pm (UTC)
From: [identity profile] Аrthg Бhrw (from livejournal.com)
самое страшное, что длина строки не length(s) а len(s)
Edited Date: 2014-12-08 07:44 pm (UTC)

Date: 2011-03-10 09:46 am (UTC)
From: [identity profile] vladimir (from livejournal.com)
> поддержку продолжений, важной фичи Схемы, которую в питоний интепретатор должно быть вставить заметно сложнее

Это что-ли? http://pastebin.com/EMb7sQe0

Date: 2011-03-10 10:37 am (UTC)
From: [identity profile] thedeemon.livejournal.com
Нет, не это.

Date: 2011-03-10 09:50 am (UTC)
From: [identity profile] vladimir (from livejournal.com)
А в целом обе программы выглядят как мелкие наколенные программки чисто для прикола (которыми, похоже, они и являются). Фаллометрия как она есть.
Питоновский исходник даже не соответствует http://www.python.org/dev/peps/pep-0008/

Date: 2011-03-10 10:37 am (UTC)
From: [identity profile] thedeemon.livejournal.com
>мелкие наколенные программки чисто для прикола

Совершенно верно.

Profile

thedeemon: (Default)
Dmitry Popov

December 2025

S M T W T F S
 12 3456
789101112 13
14151617181920
21222324252627
28293031   

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 27th, 2026 07:29 pm
Powered by Dreamwidth Studios