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

Re: kylix 2



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>  можно передать без всяких врапперов.
Именно об этом я и хотел спросить, спасибо. Правда, я не увидел этого в
приведеном коде, но да, это действительно сделать несложно.

 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/

-- 
Dmitry Astapov //ADEpt                               E-mail: adept@umc.com.ua
GPG KeyID/fprint: F5D7639D/CA36 E6C4 815D 434D 0498  2B08 7867 4860 F5D7 639D



Reply to: