On Mon, Jan 13, 2003 at 07:25:56PM +0200, Dmitry Astapov wrote: > > Evening, Vlad. > > Vlad Harchev <[EMAIL PROTECTED]> 15:10 13/1/2003 wrote: > > VH> В данном конкретном примере strstr использовать вообще не удасться, так > как > VH> она не принимает и не возвращает об[ект класса string (да и вообще у > strstr > VH> 2 параметра!). > Мда, торопился писать и выбрал совершенно неправильный пример. Приношу свои > извинения. > > VH> Но любую ф-ию с прототипом > VH> string (*)(const string& ) > VH> или > VH> string (*)( string& ) > VH> или > VH> string (*)(string ) > VH> можно передать без всяких врапперов. > Именно об этом я и хотел спросить, спасибо. Правда, я не увидел этого в > приведеном коде, но да, это действительно сделать несложно.
Ну там была использована ф-ия function2 из предыдущего pure C примера.. > VH> Она не обязана быть об[ектом - она может быть обычным указателем на С > ф-ию. > > >> показать, как можно создать и вернуть сущность типа "функция". В твоем же > >> примере возвращается нечто, ни разу не являющееся функцией. А syntactic > >> sugar в виде перегруженного оператора "()" не делает, как не старайся, > >> результат нормальной функцией. > > VH> С точки зрения семантики - результат ничем не отличается от нормальной > ф-ии. > VH> Ну разве что размер об[екта побольше чем размер указателя (но стандарт > тоже > VH> вроде ничего о размере указателя на ф-тю не говорит). Ну и что с NULL > VH> ее не сравнишь (хотя нет, можно перегрузить оператор сравнения с > (void*)). > Вот если бы еще это было возведено в ранг принципа и внесено в стандарт > языка .... Ну сравнение указателя на ф-ию с нулем очень редко нужно.. > [skip вопросы, по которым мы сошлись во мнениях - что STL - уже стандарт, и > это облегчает дело, и то, что иногда С++ и варианто нет] > > >> > >> >> data Condition = Equals String String > >> >> | NotEqual String String > >> >> | StartsWith String String > >> >> | Larger String String > >> > >> VH> Можно вопрос - а какая семантика у Condition? - отношение? > >> В данной конкретной моей программе? Семантика простая: программа - > >> компилятор/интерпретатор некоего языка XYZ, в котором отношения бывают > >> четырех > >> типов, указаных выше. Язык XYZ в качестве операндов отношений допускает > >> только литералы. Тип Condition является представлением понятие "отношение". > >> Семантика поведения понятия "отношение" тут никак не описана. > >> > >> VH> А что, поддержка отношений имеется на уровне языков? > >> Не понял вопроса :( > > VH> Я спрашивал - какой синтаксический смысл для интерпретатора языка на > которм > VH> написан этот интерпретатор - являются лексемы "Equals", "StartsWith" и > т.д. - > VH> стоковые константы, ссылки на ф-ии или что? > Для Haskell-а лексемы Equals, StartsWith - это имена т.н. "конструкторов > типа Condition". Т.е. данные типа Condition могут быть созданы при помощи > применения конструкторов Equals, NotEqual, StartsWith к двум строкам. В > общем случае, конструктор - это просто тэг, Equals String String - это то > же самое, что tuple из двух строк с тэгом 'Equals'. Тэг позволяет отличать > этот tuple от всех прочих tuple-ов. Спасибо за раз[яснения. > VH> Еще хотел спросить - в каком из функциональных языков (lisp, haskel, > ocaml, > VH> erlang, clean) возможно и с какими расходами можно реализовывать сложные > VH> структуры данных типа графов (множества вершин с множеством ребер > соединяющих > VH> пары вершин)? > > Например: > http://cs.oregonstate.edu/~erwig/fgl/haskell/ ОК, спасибо. А насколько она эффективна? И просто вопрос - в каких функциональных языках программирования есть понятие ссылок (на пер-ные, ф-ии) - за счет них в основном можно реализовать сложные структуры данных? Думаю во всех - но вдруг.. -- Best regards, -Vlad