Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.06.22;
Скачать: CL | DM;

Вниз

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

 
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;
Скачать: CL | DM;

Наверх




Память: 0.65 MB
Время: 0.024 c
8-1182311899
Ryden
2007-06-20 07:58
2008.06.22
mp3 player


2-1212010220
AXL
2008-05-29 01:30
2008.06.22
как извлечь из opendialog только путь к файлу без его имени


15-1209656258
NaRuTo
2008-05-01 19:37
2008.06.22
Написание OS на Delphi


15-1210016615
AEN
2008-05-05 23:43
2008.06.22
Шахматная пошаговая стретегия...


2-1211870709
Radgar
2008-05-27 10:45
2008.06.22
Мерцание при перемещении