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

Re: kylix 2



Evening, Andrei. 

Andrei Sosnin <demonsly@hot.ee> 02:11 11/1/2003 wrote:

>>  AS> int function(int x, int (*what_to_do)(int pnt), int point, int
>> value);
>>  AS> int function2(int x);
>> Вопросы:
>> 1)Что надо сделать, чтобы решение работало для произвольных функций a -> b,
>> а не только для функций int -> int? При этом, решение должно быть type
>> safe.
 AS> В С это не предусмотрено. Зато предусмотрено в С++ (по крайней мере,
 AS> косвенно).

Ну и где же пример? :)

 AS> Так, что такое функция? - Я понимаю так: это некоторое выражение вида:
[skip]
 AS> Но зачем может быть необходимо функции возвращать не собственное
 AS> значение, а другую функцию? (Это противоречит моему пониманию функции,
Для реализации более общих решений в более общих терминах.
AS> которое со школьной скамьи всем известно, и этого парадокса не
 AS> понимаю) Как математически это можно представить?

Все несколько сложнее... Ключевые слова - функционал, теория вычислений,
лямбда-исчисление, частичное применение, ...


>> Понимание того, как важна простота и читаемость кода приходит обычно в
>> процессе работы с legacy кодом на >100000 строк на С ....

 AS> Да уж оно и так понятно. :-) Я не понимаю, как некоторые
 AS> парадоксальные (противоречащие традиционному пониманию) особенности
 AS> (как возвращение функции функцией) могут помочь с читаемостью и
 AS> простотой кода? В первую очередь, с читаемостью? Конечно, я понимаю,
 AS> что с привычкой это становится легче, но... Признаюсь честно, в данный
 AS> момент я остального решительно не понимаю. :-)

Ну, для начала можно порекомендовать почитать что-то про closures и
continuations, например ... Тут уже упоминали книжку Фоккера - там, вроде,
было множество хороших примеров. Есть еще Structure and Interpretation of
Computer Programs (если я не ошибаюсь, первое издание доступно в эл. виде)

-- 
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: