[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: kylix 2



On Mon, Jan 13, 2003 at 07:25:56PM +0200, Dmitry Astapov wrote:
> 
> Evening, Vlad. 
> 
> Vlad Harchev <hvv@hippo.ru> 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



Reply to: