Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2008.06.22;
Скачать: [xml.tar.bz2];

Вниз

Лисп   Найти похожие ветки 

 
Alkid ©   (2008-05-05 15:14) [40]


> А на каком языке написан С++ ?

На английском!
:)


 
Григорьев Антон ©   (2008-05-05 15:20) [41]


> Alkid ©   (05.05.08 15:13) [38]
> Кстати, а разе в CL или Scheme есть паттерн-матчинг?

А я не говорил про Лисп, я говорил про функциональный подход вообще. А конкретно Лисп я знаю очень слабо, обзорно, на уровне того, что такое CAR и CDR :)))


 
Alkid ©   (2008-05-05 15:21) [42]


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

Гугль в помощь.
Советую сайт paulgraham.com, там, помимо прочего, есть интересные заметки о Лисп.
Вообще, изучать альтернативные языки полезно, даже если не собираешься их применять на практике. Сильно способствует просветлению.
Так же советую Пролог :)


> вы хотите сказать, что на дельфи этого сделать невозможно?
>  не понимаю.

В рамках такой общности, как в Лисп - нет. И дело тут не в процессоре а в том, наборе абстракций и ограничений, которые представляют собой язык Delphi.

Если вкратце, то функция mapcar получает на вход два параметра: унарную функцию и список. После чего она применяет функцию к каждому элементу списка и формирует список, содержащий результаты применения, который и возвращает. В языке дельфи, с его системой типов, написать обобщённую функцию такого характера не представляется возможным.


 
Alkid ©   (2008-05-05 15:22) [43]


> А я не говорил про Лисп, я говорил про функциональный подход
> вообще. А конкретно Лисп я знаю очень слабо, обзорно, на
> уровне того, что такое CAR и CDR :)))

А, понятно.
Меня, кстати, сейчас логическая парадигма интересует, как обобщение функциональной.


 
Anatoly Podgoretsky ©   (2008-05-05 15:26) [44]

> Пробегал2...  (05.05.2008 13:54:29)  [29]

А ты не путай маркетинговые потуги с википедией, но даже там есть пункт "т. е. в режиме реального времени"
OnLine слово волшебное.им к доктору.


 
Anatoly Podgoretsky ©   (2008-05-05 15:28) [45]

> Игорь Шевченко  (05.05.2008 14:08:33)  [33]

Кстати учитывая последнии шаги Борланда я удивлен, а почему нет, а вот IncDay есть.


 
Игорь Шевченко ©   (2008-05-05 15:33) [46]

Пробегал2...   (05.05.08 15:13) [39]

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


 
Игорь Шевченко ©   (2008-05-05 15:35) [47]

Anatoly Podgoretsky ©   (05.05.08 15:28) [45]

IncDay больше востребован


 
oxffff ©   (2008-05-05 15:36) [48]


> Alkid ©   (05.05.08 15:21) [42]
>
> > ничего не читал, ничего не писал и не собираюсь. Но заинтересовала
>
> > эта тема.
>
> Гугль в помощь.
> Советую сайт paulgraham.com, там, помимо прочего, есть интересные
> заметки о Лисп.
> Вообще, изучать альтернативные языки полезно, даже если
> не собираешься их применять на практике. Сильно способствует
> просветлению.
> Так же советую Пролог :)
>
>
> > вы хотите сказать, что на дельфи этого сделать невозможно?
>
> >  не понимаю.
>
> В рамках такой общности, как в Лисп - нет. И дело тут не
> в процессоре а в том, наборе абстракций и ограничений, которые
> представляют собой язык Delphi.
>
> Если вкратце, то функция mapcar получает на вход два параметра:
>  унарную функцию и список. После чего она применяет функцию
> к каждому элементу списка и формирует список, содержащий
> результаты применения, который и возвращает. В языке дельфи,
>  с его системой типов, написать обобщённую функцию такого
> характера не представляется возможным.



А пытался?


 
Palladin ©   (2008-05-05 15:43) [49]


> oxffff ©   (05.05.08 15:36) [48]

написать можно, но нафика? :)


 
Григорьев Антон ©   (2008-05-05 15:46) [50]


> oxffff ©   (05.05.08 15:36) [48]
> А пытался?

Но ведь действительно невозможно. В Delphi придётся задавать тип элементов списка и функции на этапе компиляции, а в Лиспе тиипзация будет динамической, что-то вроде шаблона. А самое главное, что если элементы списка имеют разные типы, но к каждому из них функция, переданная в mapcar, применима, тоже всё будет в порядке - такого в Delphi не написать, даже если были бы generic"и.


 
Palladin ©   (2008-05-05 15:47) [51]


> Григорьев Антон ©   (05.05.08 15:46) [50]


> В Delphi придётся задавать тип элементов списка и функции
> на этапе компиляции

угу и это будет variant


 
oxffff ©   (2008-05-05 15:48) [52]

type
TXFUNC=function (const a:TvarRec):TvarRec;

function abc(var List:array of const;func:TXFUNC):integer;
var i:integer;
begin
for i:=0 to length(List)-1 do LIST[i]:=func(LIST[i]);
end;

function XSample(const a:TvarRec):TvarRec;
begin

end;

procedure TForm1.Button1Click(Sender: TObject);
var a:array of TVarRec;
begin
abc(A,XSample);
end;

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

ЗЫ. решения есть еще. и не одно.


 
oxffff ©   (2008-05-05 15:49) [53]


> Григорьев Антон ©   (05.05.08 15:46) [50]


Нужно лучше знать Delphi. И вопросов будет меньше.


 
oxffff ©   (2008-05-05 15:50) [54]


> Григорьев Антон ©   (05.05.08 15:46) [50]
>
> > oxffff ©   (05.05.08 15:36) [48]
> > А пытался?
>
> Но ведь действительно невозможно. В Delphi придётся задавать
> тип элементов списка и функции на этапе компиляции, а в
> Лиспе тиипзация будет динамической, что-то вроде шаблона.
>  А самое главное, что если элементы списка имеют разные
> типы, но к каждому из них функция, переданная в mapcar,
> применима, тоже всё будет в порядке - такого в Delphi не
> написать, даже если были бы generic"и.


Как у вас с ООП?


 
oxffff ©   (2008-05-05 15:51) [55]


> Григорьев Антон ©   (05.05.08 15:46) [50]
>
> > oxffff ©   (05.05.08 15:36) [48]
> > А пытался?
>
> Но ведь действительно невозможно. В Delphi придётся задавать
> тип элементов списка и функции на этапе компиляции, а в
> Лиспе тиипзация будет динамической, что-то вроде шаблона.
>  А самое главное, что если элементы списка имеют разные
> типы, но к каждому из них функция, переданная в mapcar,
> применима, тоже всё будет в порядке - такого в Delphi не
> написать, даже если были бы generic"и.


Далее по тексту? Читали ли мы TcustomVariant?
Это кстати другое решение.
Еще есть два мощнейших и простых наследника у него.
Но это к вопросу о расширениии языка.


 
Alkid ©   (2008-05-05 15:54) [56]


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


Супер. И как мне стандартную функцию sin(x:double) тут заюзать? :)


 
Anatoly Podgoretsky ©   (2008-05-05 15:54) [57]

> Игорь Шевченко  (05.05.2008 15:35:47)  [47]

Все правильно, более приоритетен, а у Eval пока недостаточный приоритет, иконку, которая там, тоже не сразу сделали.


 
Palladin ©   (2008-05-05 15:58) [58]


> oxffff ©

ты эта :) не нервничай... подобие реализовать можно, но ограничено... именно так как в лиспе - не выйдет...


 
oxffff ©   (2008-05-05 15:59) [59]


> Palladin ©   (05.05.08 15:58) [58]


Я эта не нервничаю. Ежели что. :)


 
Игорь Шевченко ©   (2008-05-05 16:02) [60]

oxffff ©   (05.05.08 15:51) [55]

А нафига Codegear в язык добавляет Generic-и ? Если все так просто можно сделать и без них...


 
тимохов   (2008-05-05 16:02) [61]

что же ты все, сергей, на личности переходишь...


 
oxffff ©   (2008-05-05 16:06) [62]

Alkid ©
Я даже боюсь сказать о том, что синтаксис можно сокрашить до.
var a:variant;
begin

a.sin;


 
oxffff ©   (2008-05-05 16:07) [63]


> тимохов   (05.05.08 16:02) [61]


Рад слышать.
Где?


 
oxffff ©   (2008-05-05 16:09) [64]


> oxffff ©   (05.05.08 16:06) [62]


Более того эту конструкцию можно даже расширить.

function abc(a:variant;funcName:string);
c вызовом abc(a,"sin");

ЗЫ. Читаем справку по Delphi.


 
Ketmar ©   (2008-05-05 16:13) [65]

2oxffff: ну и что ты пытаешься доказать? что в конце концов всё спускается к машинному коду, и что реализуемо на одном turing-complete, то можно и на другом реализовать? можно. баян. лучше спроси у лисперов, как сделать статическую (или хотя бы динамическую) проверку типов без изменения интерпретатора — и будете в рассчёте.


 
Игорь Шевченко ©   (2008-05-05 16:14) [66]

И вообще все можно написать на ассемблере. Только долго.


 
oxffff ©   (2008-05-05 16:20) [67]


> Игорь Шевченко ©   (05.05.08 16:02) [60]
> oxffff ©   (05.05.08 15:51) [55]
>
> А нафига Codegear в язык добавляет Generic-и ? Если все
> так просто можно сделать и без них...


В том то и дело. То о чем говорю я это будет динамика.
Поэтому этот тип фактически является оберткой над реальным типом.
Это может быть например TvarRec, TvarData , Объект, и надо подумать на чем еще построить.

Что касаемо generics. То это статика. Поэтому вызов будет проверяться в compile time.
А если нацеплен constraint (а я думаю что  delphi Win32 будет поддерживать концепцию .NET generics, а не С++ templates).
Но честно говоря характеристики Win32 generics не известны.


 
oxffff ©   (2008-05-05 16:28) [68]


> Ketmar ©   (05.05.08 16:13) [65]
> 2oxffff: ну и что ты пытаешься доказать?


Где?
Я только хочу сказать, что если надо, то задача решаема.
И достаточно просто. И при желании. До простого синтаксиса.

[62],[64]

Кто короче?


 
oxffff ©   (2008-05-05 16:36) [69]


> Игорь Шевченко ©   (05.05.08 16:02) [60]
> oxffff ©   (05.05.08 15:51) [55]
>
> А нафига Codegear в язык добавляет Generic-и ? Если все
> так просто можно сделать и без них...


Можно.
Но не забываем что нам на всех форумах представители С++ сообщества ставят в укор. А любят они тыкать нас носом на шаблонную сортировку.
И заслуженно кстати. Любая операция с динамическим анализом и преобразованием занимает время. Поэтому в скорости мы проигрываем.
И пока мы пишем код для разных типов для сопоставимых результатов с С++, они уже решают другие задачи.


 
Григорьев Антон ©   (2008-05-05 16:36) [70]


> oxffff ©   (05.05.08 15:48) [52]
> type
> TXFUNC=function (const a:TvarRec):TvarRec;
>
> function abc(var List:array of const;func:TXFUNC):integer;
>
> var i:integer;
> begin
> for i:=0 to length(List)-1 do LIST[i]:=func(LIST[i]);
> end;
>
> function XSample(const a:TvarRec):TvarRec;
> begin
>
> end;
>
> procedure TForm1.Button1Click(Sender: TObject);
> var a:array of TVarRec;
> begin
> abc(A,XSample);
> end;

Не компилируется abc([1,"a", 2], XSample), т.е. константный список кушать не хочет. В Лиспе с этим проблем нет. Я уж молчу о том, что чтобы правильно сформировать содержимое массива a, надо будет повозиться с полями TVarRec, что очень неудобно. Полиморфизм функции XSample тоже не так просто сделать.

> oxffff ©   (05.05.08 15:50) [54]
> Как у вас с ООП?

Видимо, очень плохо. Потому что не представляю, при чём вообще ООП, когда я хочу выполнить простые операции над типами integer, real, char и т.п.

> oxffff ©   (05.05.08 15:51) [55]
> Далее по тексту? Читали ли мы TcustomVariant?
> Это кстати другое решение.

Да, читали. Но TCustomVariant - это всё-таки не элементарный тип, а обеспечивать полиморфизм на уровне простых типов Delphi не умеет.

> oxffff ©   (05.05.08 16:06) [62]
> Я даже боюсь сказать о том, что синтаксис можно сокрашить
> до.
> var a:variant;
> begin
>
> a.sin;

Написал такую проверку:
procedure TForm1.Button1Click(Sender: TObject);
var v:Variant;
begin
 v:=0;
 v.Sin(0)
end;

Получил ожидаемый результат - исключение в строке с синусом. Потому что такие фокусы проходят только когда v содержит указатель на IDispatch, т.е. простые типы опять пролетают как фанера над Парижем. Ответ насчёт стандартной функции sin не засчитывается.


 
Григорьев Антон ©   (2008-05-05 16:40) [71]


> oxffff ©   (05.05.08 16:28) [68]
> Я только хочу сказать, что если надо, то задача решаема.

Решаема. Можно вообще написать на Delphi библиотеку - интерпретатор Лиспа и делать что-то вроде
a := LispEval("(apply "mapcar (cons "list lst))");
Совсем короткий синтаксис получится :)


 
Игорь Шевченко ©   (2008-05-05 16:42) [72]

oxffff ©   (05.05.08 16:20) [67]

Мне будет крайне интересна передача классов в иерархии через TVarRec

type
 TFooBase = class
 public
    procedure SomeMethod (Param: TParam); virtual;
 end;

 TFoo = class(TFooBase)
 ...
 end;
 TBar = class(TFoo)
 ...
 public
    procedure SomeMethod (Param: TParam); override;
 end;

То есть, при generic-ах я могу написать

 type
   TFooList = TList<TFoobase>
   public
    ...
     procedure ApplySomeMethod (Param: TParam);
   end;

procedure TFooList.ApplySomeMethod (Param: TParam);
var
 I: Integer;
begin
 for I:=0 to Count-1 do
   Items[I].SomeMethod (Param);
end;


 
oxffff ©   (2008-05-05 16:47) [73]


> Григорьев Антон ©   (05.05.08 16:36) [70]


На все твои замечения ответы дам вечером.


 
oxffff ©   (2008-05-05 16:50) [74]


> Игорь Шевченко ©   (05.05.08 16:42) [72]


Предлагаю назначить время вечером и я думаю все решим.
Во сколько сегодня?

P.S. Шеф срочно просит написать хрень на ABAP.


 
ПостОвый терминатор ©   (2008-05-05 16:55) [75]

Давно не наблюдаю AEN   (02.05.08 21:46), а пост живет и здравствует. Особенно радуеи состав полемистов:)
Успехов Вам в вашем творчестве.


 
Alkid ©   (2008-05-05 17:22) [76]


> P.S. Шеф срочно просит написать хрень на ABAP.

А на ABAP как mapcar написать? :)))


 
Alkid ©   (2008-05-05 17:24) [77]


> ПостОвый терминатор ©   (05.05.08 16:55) [75]

Осталось ещё участкового терминатора придумать :)


 
Ega23 ©   (2008-05-05 17:32) [78]


> Alkid ©   (05.05.08 17:24) [77]


Почту проверь.


 
ПостОвый терминатор ©   (2008-05-05 17:38) [79]

Господа, заинтересованные! Извините еще в очередной раз. Позвольте спросить, что Вам мешает открыть соответствующую (новую) обсуждению ветку? А не флудить в ветке автора, которого ваша "переписка" похоже не интересует:(


 
Palladin ©   (2008-05-05 17:42) [80]


> ПостОвый терминатор ©   (05.05.08 17:38) [79]

А ведь кто-то, буквально ~8 минут назад, флуданул в другой ветке. Не будем показывать пальцами, но это был слоненок.



Страницы: 1 2 3 4 5 6 вся ветка

Форум: "Прочее";
Текущий архив: 2008.06.22;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.64 MB
Время: 0.05 c
2-1212041689
Alex Ford
2008-05-29 10:14
2008.06.22
Вложение электронной почты


15-1210561061
Slider007
2008-05-12 06:57
2008.06.22
С днем рождения ! 12 мая 2008 понедельник


15-1210168260
тимохов
2008-05-07 17:51
2008.06.22
Как передать кавычку в параметрах командной строки?


2-1211698255
may be I am noob...
2008-05-25 10:50
2008.06.22
Юлианов День


2-1211411529
Timer
2008-05-22 03:12
2008.06.22
Как обновить TListView в режиме vsIcon?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский