• _ShaggyDoc (05.05.08 09:04) [20]

    > Пробегал2...   (05.05.08 00:47) [17]


    > Ну а я на Delphi могу использовать какую-нибудь DLL или
    > .PAS юнит, где тоже надо будет дернуть только 1-2 фунции.
    >  И что?

    Конечно, можно. Только надо, чтобы эти функции, которые можно "дернуть", кто-то разработал. Можно и самому написать, но с тем же транспонированием придется изрядно поработать, привлекая еще какие-то библиотеки. А тут полстрочки.

    Или, например, вычисление выражения, написанного в виде исходного текста. Есть такие библиотеки и в Delphi, но реализация их непростая - надо парсить, анализировать и прочее. А в LISP опять же очень просто - всего лишь
    (eval (read expression))



    Кроме того, на LISP также пишут собственные библиотеки, фактически создавая расширение языка. У меня, например, около 5000 собственных функций - больших и маленьких.

    Например, при вызове функции

    (ru-3d-pump-k 320.0 675.0 140.0 670.0 145.0 237.0 700.0 1102.0 395.0 395.0 24.0 0 0.0 0.0 (ru-3d-pipe-flange-std-150-16) (ru-3d-pipe-flange-std-125-16) (ru-3d-electro-motor-160-1001))



    Будет создана 3D-модель насоса с электродвигателем, всеми болтиками, фланцами и прочим - почти как фото. Вызов функции можно встроить в программу более высокого уровня, например для выбора  модели (т.е. аргументов) из базы данных. Но вот работу с БД я лучше сделаю на Delphi - там это можно реализовать гораздо лучше.

    Этот же код, в виде текстового атрибута, у меня вписывается в меню, написанное на XML. Именно на XML, а не в виде LISP-текста (хотя и так можно). Но XML более универсален. И функция для визуальной работы с XML (фактически выбор из древовидной БД), реализована у меня на Delphi, включая парсер XML. Вызов же этой функции осуществляется из LISP.


    > где вы блин раньше были... я вот буквально недавно интересовался
    > по поводу реализации быстрой сортировки в лиспе...


    Сортировка - это не то, что я показал. Это сложнее, займет целую страницу. Правда сейчас в большинстве реализаций LISP сортировка является штатным средством, поэтому к её разработкам охладели. Или студентов ею мучают.

    LISP это как бы иная "цивилизация" с иным образом мышления. Не лучше и не хуже, например, Pascal, а просто иная. В LISP, например, вообще нет операторов, а есть только функции - даже if функция, а не просто "управляющая конструкция". Типы данных есть, но объявлять их не надо. С точки зрения Pascal это ужасно, а в LISP оборачивается преимуществом. На LISP можно писать и "по-бейсиковски", но от этого надо сразу избавляться. Можно вводить переменные, а можно и без них обходиться. Но и LISP заимствует кое-что из "традиционных" языков, например аналог try...except. Или возможность использовать COM-технологии.
  • Григорьев Антон © (05.05.08 09:39) [21]

    > _ShaggyDoc   (05.05.08 09:04) [20]
    >
    >> Сортировка - это не то, что я показал. Это сложнее, займет
    > целую страницу.

    А что так много? На Хаскеле - две строки:

    qsort [] = []
    qsort (x:xs) = qsort (filter (<=x) xs) ++ [x] ++ qsort (filter (>x) xs)



    Неужели в Лиспе это нельзя написать так же кратко?
  • ferr (05.05.08 11:04) [22]
    > Неужели в Лиспе это нельзя написать так же кратко?

    ну не также кратко, но идейно тоже самое написать легко, медленно это очень.
  • тимохов (05.05.08 11:14) [23]
    а вот идеологи функциональных языков говорят, что у ф. языков большие перспективы - были бы интеллектуальные среды выполнения, которые умеют распараллеливать выполенения.

    т.е. типа - пишешь программу, а она сама на кластер раскладывается.
  • ferr (05.05.08 11:17) [24]
    > а вот идеологи функциональных языков говорят, что у ф. языков
    > большие перспективы - были бы интеллектуальные среды выполнения,
    > которые умеют распараллеливать выполенения.
    >
    > т.е. типа - пишешь программу, а она сама на кластер раскладывается.

    Ну так это разьве не очевидно? смотрим на [21] и понимаем что два вызова qsort могут идти на абсолютно любые машины/процессоры т.к. они не вызывают side effect's. Главное чтобы интерпретатор смог сообразить что да куда, а это ведь жутко нетривиально.
  • Ketmar © (05.05.08 11:27) [25]
    > _ShaggyDoc   (04.05.08 22:05) [15]
    > Список — это все-таки данные в памяти, и это совсем не СУБД
    > и даже не простенький плоский DBF-файл.

    take a look at PicoLISP.

    > Однако ничего споставимого по результатам с другими средами
    > разработки в LISP, к моему сожалению, не появилось.

    ну да, формостроительства и батонокидательства нет. наверное, не надо никому. в остальном — а что, есть что-то мощней emacs? O_O

    > Там все правильно. lst — это обрабатываемый список.
    откуда мне это знать было? может, это убойный макрос вовсе, который в твоём диалекте лиспа во что-то раскрывается в таком виде?

    > Palladin ©   (04.05.08 22:26) [16]
    > где вы блин раньше были… я вот буквально недавно интересовался
    > по поводу реализации быстрой сортировки в лиспе…

    каком именно? например, на многих common lisp категорически воспрещается писать рекурсивную функциональщину. потому что в стандарте нет требования на tail recursion in constant stack space, как в scheme, и люди не озадачиваются реализацией этой штучки.

    > _ShaggyDoc   (05.05.08 09:04) [20]
    > Сортировка — это не то, что я показал. Это сложнее, займет
    > целую страницу.

    ; ArrowLISP Example Program
    ; Copyright © 2005,2006 Nils M Holm. All rights reserved.
    ; See the file LICENSE of the ArrowLISP distribution
    ; for conditions of use.

    ; Sort a list using the Quicksort algorithm:
    ; (require '=nmath)
    ; (qsort <= '
    (#5 #1 #3 #2 #4)) => '(#1 #2 #3 #4 #5)

    (define (qsort p a)
     (letrec

       ((filter (lambda (p a r)
         (cond ((null a) (reverse r))
           ((p (car a))
             (filter p (cdr a) (cons (car a) r)))
           (t (filter p (cdr a) r)))))

       (_qsort (lambda (a)
         (cond ((null a) a)
           (t (letrec
                ((left-part (lambda (x)
                  (lambda (y) (not (p x y)))))
                (right-part (lambda (x)
                  (lambda (y) (p x y)))))
                (append
                  (_qsort (filter
                            (left-part (car a))
                            (cdr a) ()))
                  (list (car a))
                  (_qsort (filter
                            (right-part (car a))
                            (cdr a) ())))))))))

       (_qsort a)))



    > Григорьев Антон ©   (05.05.08 09:39) [21]
    > А что так много? На Хаскеле — две строки
    реализация лиспа: 100 килобайт на C. писана за пару дней. покажите мне такое же для хаскеля. чтобы при этом оно ещё и не тормозило, как квака на старых 486-х.

    помимо прочего — хаскель нифига не применим в качестве скриптового языка. к тому же я его не знаю, и это ему большой минус. %-)
  • Ketmar © (05.05.08 11:31) [26]
    > тимохов   (05.05.08 11:14) [23]
    > т.е. типа — пишешь программу, а она сама на кластер раскладывается.

    абсолютно любой язык, где есть возможность писать код без side effects обладает этим свойством. штука в том, что такие языки — они как раз функциональные.
  • Palladin © (05.05.08 11:35) [27]

    > каком именно? например, на многих common lisp категорически
    > воспрещается писать рекурсивную функциональщину.

    фиг знает на каком, это было совсем недавно, около пяти с половиной лет назад, потому сказать не могу, задача была задана преподом и не мне, попросили решить просто... и использовал я помоему mlisp какой то... не скажу точно...

    помню только что мой вопрос остался без ответа :)
  • Григорьев Антон © (05.05.08 11:43) [28]

    > тимохов   (05.05.08 11:14) [23]
    > а вот идеологи функциональных языков говорят, что у ф. языков
    > большие перспективы - были бы интеллектуальные среды выполнения,
    >  которые умеют распараллеливать выполенения.
    >
    > т.е. типа - пишешь программу, а она сама на кластер раскладывается.
    >

    На эту тему много пишет Jack Of Shadows вот здесь: http://www.delphikingdom.com/asp/talktopic.asp?ID=366 Если покопаться, можно найти интересные ссылки как на теоретические работы, так и на экспериментальные распараллеливающие трансляторы.
  • Пробегал2... (05.05.08 13:54) [29]
    Anatoly Podgoretsky ©   (05.05.08 1:33) [19]
    Ты не путай с Интернетом.
    OnLine значит на ходу


    ну это конечно. У вас как всегда самая актуальная информация насчет значений слов.

    "Онлайн (англ. online, от англ. on line — русск. на линии) — «находящийся в состоянии подключения». Первоначально использовалось только в отношении коммуникационного оборудования для указания на режим связи. В отношении ПО почти всегда означает «подключённый к интернету» или функционирующий только при подключении к интернету. Также — «происходящее в Интернете», «существующее в Интернете». К примеру «онлайн-банкинг», «онлайн-магазин», «онлайн-казино», «онлайн-игра». В этих значениях часто употребляется также прилагательное онлайновый.

    Технические специалисты в отношении применения в русском языке данного заимствованного слова могут сказать, что «термин используется для потребительского описания клиентской части в архитектуре „клиент-сервер“».

    Первоначальное значение — «не вешая трубку», за один телефонный звонок, т. е. в режиме реального времени"


    http://ru.wikipedia.org/wiki/Online

    _ShaggyDoc   (05.05.08 9:04) [20]
    Только надо, чтобы эти функции, которые можно "дернуть", кто-то разработал


    конечно. Также как кто-то должен был разработать компилятор LISP'а

    _ShaggyDoc   (05.05.08 9:04) [20]
    Можно и самому написать, но с тем же транспонированием придется изрядно поработать, привлекая еще какие-то библиотеки. А тут полстрочки.


    ну так полстрочки, потому что в LISP встроенно готовое решение. Если будет готовая библиотека с готовым решением - то полстрочки и в других языках?

    _ShaggyDoc   (05.05.08 9:04) [20]
    Или, например, вычисление выражения, написанного в виде исходного текста. Есть такие библиотеки и в Delphi, но реализация их непростая - надо парсить, анализировать и прочее


    Ну опять же можно подумать, что реализация компилятора LISP'а простая? Там будто нету парсинга, анализа и прочего?

    _ShaggyDoc   (05.05.08 9:04) [20]
    Кроме того, на LISP также пишут собственные библиотеки, фактически создавая расширение языка


    вот тут я вообще прифигел. На самом деле на других языках точно также можно писать свои библиотеки. И допустим под windows есть даже стандарт таких библиотек - DLL, который позволяет использовать библиотеку, написанную на другом языке.
  • Alkid © (05.05.08 13:56) [30]

    > А как вы относитесь к языку Lisp? Освоил за один день...
    >  Показался самым нормальным языком... По логичности и структурности
    > получше, чем Pascal и C...

    А ты какой Лисп изучил? Фишка в том, что сейчас нет "просто" Лиспа, есть Common Lisp и Scheme + разные другие диалекты.
  • Palladin © (05.05.08 13:58) [31]

    > Alkid ©   (05.05.08 13:56) [30]

    фишка в том, что он его изучил по "Lisp для чайников за 24 часа"... как и Pascal и C...
  • Alkid © (05.05.08 14:06) [32]

    > фишка в том, что он его изучил по "Lisp для чайников за
    > 24 часа"... как и Pascal и C...

    Мда уж.
    Я, вот, Prolog не так давно *начал* изучать.  Понимание того, как это работает пришло на третьем прочтении вводного курса. До этого было "понятно" на уровне "ага, утверждения, правила вывода, унификация, всё просто". А потом как прозрел - так стыдно стало.

    Сейчас, кстати, активно штудирую книгу Пола Грэхэма "Onlisp".  Специально к автору топика - почитай, увидишь, как ты "изучил" Lisp :)
  • Игорь Шевченко © (05.05.08 14:08) [33]
    Пробегал2...   (05.05.08 13:54) [29]


    > Ну опять же можно подумать, что реализация компилятора LISP'а
    > простая? Там будто нету парсинга, анализа и прочего?


    Видишь ли, в компиляторе Delphi тоже есть анализ, парсинг и прочая хрень, а вот готовой функции, которая выражение вычисляет, нету...
  • Пробегал2... (05.05.08 14:26) [34]
    Игорь Шевченко ©   (05.05.08 14:08) [33]
    Видишь ли, в компиляторе Delphi тоже есть анализ, парсинг и прочая хрень, а вот готовой функции, которая выражение вычисляет, нету...


    так и я об этом. LISP получается "уникален" только тем, что в него встроена куча готовых функций математических. И все?

    Я не знаю на каком языке написан LISP, но если этот язык умеет компилировать DLL, то в принципе получается, что при определенном подходе можно сделать кучу готовых DLL с богатыми экспортными функциями LISP'а, после чего на любом языке можно будет программировать под LISP.
  • Alkid © (05.05.08 14:47) [35]

    > так и я об этом. LISP получается "уникален" только тем,
    > что в него встроена куча готовых функций математических.
    >  И все?

    Сорри за нескромный вопрос - насколько глубоко Вы Lisp знаете?
    Что Вы о нём читали, писали ли программы?

    Если брать дифференцированное описание от дельфи, то в лиспе есть:
    1. Макросы (не путать с C/C++ макросами), позволяющие почти произвольным образом расширять язык.
    2. Первоклассные функции и функции высшего порядка.
    3. Замыкания
    4. (в Схеме) первоклассные продолжения. Мне, кстати, схема этим оч-чень нравится. При помощи продолжений так очень классно реализуюте недетерминистические алгоритмы. :)

    Это, ИМХО, основное.

    P.S. mapcar - это совсем не математическая функция. Прочитайте про неё и попробуйте сделать то же самое на Delphi.
  • Григорьев Антон © (05.05.08 14:49) [36]

    > Пробегал2...   (05.05.08 14:26) [34]

    Прежде чем делать такие заявления, может, стоит немного познакомиться с функциональным подходом? Вот, очень рекомендую: http://www.lib.ru/CTOTOR/FUNCPROG/

    А вот небольшой и неполный список того, что есть в функциональных языках и что никакой DLL не сделать:
    1. Сопоставление аргумента шаблону
    2. Функции высших порядков и анонимные функции
    3. Карринг функций
    4. Передача аргументов по имени, ленивые вычисления.

    Не всё это есть в Лиспе (ленивых вычислений точно нет, карринга, кажется, тоже), но его всё равно просто так к императивному языку не прикрутишь.
  • Игорь Шевченко © (05.05.08 14:51) [37]
    Пробегал2...   (05.05.08 14:26) [34]


    > Я не знаю на каком языке написан LISP


    А на каком языке написан С++ ?
  • Alkid © (05.05.08 15:13) [38]

    > 1. Сопоставление аргумента шаблону

    Кстати, а разе в CL или Scheme есть паттерн-матчинг?  Я стандарт подразумеваю, прикрутить макросами его можно - это ясно.
  • Пробегал2... (05.05.08 15:13) [39]
    Alkid ©   (05.05.08 14:47) [35]
    Сорри за нескромный вопрос - насколько глубоко Вы Lisp знаете?


    вообще никак.

    Alkid ©   (05.05.08 14:47) [35]
    Что Вы о нём читали, писали ли программы?


    ничего не читал, ничего не писал и не собираюсь. Но заинтересовала эта тема.

    Alkid ©   (05.05.08 14:47) [35]
    mapcar - это совсем не математическая функция. Прочитайте про неё и попробуйте сделать то же самое на Delphi


    вы хотите сказать, что на дельфи этого сделать невозможно? не понимаю.
    Это ведь очевидно не комманда для процессора, а соответственно она как-то должна быть разложена в комманды для процессора. И в компиляторе (интерпритаторе?) LISP'а эти преобразования делаются. Почему же в дельфи их нельзя сделать?

    Ведь в LISP'е (который написан наверняка не на LISP'е) этого же сделали?

    Игорь Шевченко ©   (05.05.08 14:51) [37]
    А на каком языке написан С++ ?


    если вы решили поиграть в придирки к словам - то замечу, что я имел в виду "Я не знаю на каком языке написан компилятор/интерпритатор LISP'а"
Есть новые Нет новых   [134435   +8][b:0.001][p:0.002]