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: