Форум: "Прочее";
Текущий архив: 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