1. Python / Говнокод #14352

    −101

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    from fakelisp import *
    
    # And now you can write Lisp
    (BEGIN
        (SET (F) (LAMBDA (X)
            (IF (EQ (X) (1))
                (1)
                (MUL (X) (F (SUB (X) (1)))))))
    
        (SET (X) (QUOTE (F (4)) (42))))
    
    # Back to Python any time
    print "x: ", X

    Запостил: laMer007, 14 Января 2014

    Комментарии (27) RSS

    • Ответить
    • (F), (X), (4) - не торт
      Ответить
    • где гуана? атомы обернуты в скобки?
      пысы: лисп на плюсах http://www.intelib.org/intro.html
      Ответить
    • >Все хорошо, но пример с факториалом из самого начала статьи работать не будет. Потому что IF у нас неправильный и на самом деле обе ветки вычисляются, даже если результат заведомо нас не интересует. То есть рекурсия будет выполняться по двум веткам до тех пор, пока не сломается интерпретатор. Победить это по честному невозможно, поэтому ограничим глубину рекурсии раньше, чем это сделает Питон.

      не нужен.
      Ответить
    • Вот не пойму я Лисп, хоть убей...
      Ну да, программу можно представить как список списков списков списков.
      Но зачем?
      Эзотерика, а многие почему-то считают его практически применимым.
      Единственное практическое преимущество, имхо - простота парсера. Это да, это есть. Но всё остальное...
      Ответить
      • ты сейчас открыл врата ада и призвал wvxvw
        Ответить
      • Многие задачи в функциональном подходе становятся проще. Просто писать ЧИСТО на функциональщине проблематично. Если это конечно не кококонсоль
        Ответить
        • Ну с этим я не спорю, ни с первым, ни со вторым.

          Кстати, да, консоль по сути ведь... не замечал.
          Ответить
          • Консоль?!! Какой кошмар!!
            Ответить
          • > Кстати, да, консоль по сути ведь...
            Мы с бормандом это уже как-то обсуждали, но обсуждение не гуглится :(
            Ответить
            • Что проги, которые читают только stdin + аргументы, а пишут только на stdout функционально чисты?
              Ответить
              • Вроде того. Про юникс вэй и архитектуру "каналы и фильтры". Давно уже это было...
                Ответить
      • > Но зачем?

        Почитай как макросы работают в лиспе.

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

        Вот тот же (loop) посмотри. Лично не фан, но просто факт что такое можно написать макросом, да и еще на уровне макроса добавить оптимизаций, это что то.
        Ответить
      • Лисп - не функциональный язык, и вообще не язык, Лисп может относится к двум понятиям:
        1. Способ записи (аналогично, как Фортрано-подобные языки все похожи друг на друга способом записи).
        2. Наличием встроенного в рантайм компилятора / интерпретатора языка. С этой точки зрения, например Питон или Руби - тоже лиспы.

        Не все лиспы исторически обладали "лисповым" синтаксисом, у Дилана - фортрановский синтаксис.

        Половина лиспов использующихся сегодня - не функциональные языки, (функциональные, или по крайней мере близкие - Схема, Ракет, Кложур). В Эмакс Лиспе до последней редакции не было даже возможности создавать замыкания.

        Большинство современных лиспов не выполняют код один-в-один с деревом представленным его исходником. Есть много оптимизирующих компиляторов, которые расценивают этот код, как промежуточное звено.

        Смысл использовать Лисп в том, что с помощью инструментов языка можно очень легко строить языковые расширения. Например, чтобы в Яве автоматически создать сеттер и геттер для поля класса нужно написать / импортировать lombok аннотации, и после чего это все равно будет выглядеть уродски, не говоря уже про более сложные структуры, где это иногда будет выглядеть либо очень громоздко, либо вообще невозможно. (Попробуйте добавить в Яве другую разновидность форича, которая перебирает сразу несколько коллекций).

        Лисп хорошо сочетается с исследовательской работой в области программирования, когда нужно представить какую-нибудь концепцию, для которой еще не написан компилятор / интерпретатор. Или для понятий, которые не заложены в другой язык изначально. Например, в Яве можно сымитировать и множественное наследование, и множественный диспатч, метаклассы и т.п. Но синтаксис для этого будет очень громоздкий, что пользоваться этим будет не удобно. В Лиспе, если бы нам нужно было сделать что-нибудь похожее, наши нововведения ни чем бы не отличались от уже существующих инструментов.
        Ответить
        • > Лисп - ... вообще не язык
          > Способ записи
          Sexp - способ записи, а не лисп, имхо

          > Лисп может относится к двум понятиям
          > Питон или Руби - тоже лиспы
          А можно пруфы?

          LISP = LISt Processing language
          Хм... Следуя такой логике, можно считать, что любой язык, в котором можно обрабатывать списки - полноценный лисп.
          Ответить
          • http://steve-yegge.blogspot.co.il/2006/04/lisp-is-not-acceptable-lisp.html
            Ответить
            • Ну прочитал, хотя практически всё это я уже и так знал. Пруфов ваших высказываний не нашёл. Да и не мог найти в принципе - это лишь мнение конкретного человека.
              Ну даже если так, ткните носом, где там написано, что лисп это лишь форма записи и/или доступный в рантайме интерпретатор/компилятор. Семейство языков - да, но взгляда на код обычно достаточно, чтобы сказать, лисп это или нет.
              Ответить
              • Мнение конкретного человека? Там линк на обсуждение с тьмой комментариев.
                Кроме того, есть известное интервью с МакКарти, где его спрашивали о том, считает ли он Руби лиспом (он не считал). Но факт того, что такие заявления делались как бы на лицо.

                ЗЫ. http://www.european-lisp-symposium.org/
                Они вот, например, ж.скрипт причисляют к лиспам :(
                Ответить
      • Символьное, мать его, программирование.
        Ответить
    • Люди, а QUOTE второй аргумент просто игнорит же?
      Ответить
      • Нет. Емнип, просто возвращает дословно, не исполняя.
        Ответить
        • ну так х то все равно присвоится 4!, я же прав?
          Ответить
    • Если что, это отсюда:
      http://habrahabr.ru/post/208934/
      Ответить

    Добавить комментарий