Ниша PascalABC.NET

Хорошо, вот вам пример легче.

function Подставить5В(f:real->real):real;//Первый параметр тут это функция принимающая
                                         //число типа "real" и возвращающея другое число,
                                         //тоже типа "real"
begin
  Result := f(5);//Тут мы вызываем функцию которую передали как параметр, давая ей 5 на вход
end;

function УмножитьНа2(r: real): real := r*2;//эта функция берёт число и возвращает его же, умноженое на 2

function ВозвестиВКвадрат(r: real): real := r*r;//эта функция берёт число и возвращает его же, возведённое в квадрат

begin
  writeln(Подставить5В(УмножитьНа2));       //Тут мы передаём в "Подставить5В" функцию, которая умнажает входное число на 2
                                            //При выполнении в функцию "УмножитьНа2" подставит 5, а затем выведет результат
                                      
  writeln(Подставить5В(ВозвестиВКвадрат));  //Тут мы передаём в "Подставить5В" функцию, которая возводит входное число в квадрат
                                            //При выполнении в функцию "ВозвестиВКвадрат" подставит 5, а затем выведет результат
end.

Это же можно записать так:

function Подставить5В(f:real->real):real;
begin
  Result := f(5);
end;

begin
  writeln(Подставить5В(r->r*2));
  writeln(Подставить5В(r->r*r));
end.

То есть тут мы функции УмножитьНа2 и ВозвестиВКвадрат заменили лямбдами. Лямбды работают так же как и полные функции, но их можно описать прямо на строке где вы их используете, не создавая дополнительные имена (УмножитьНа2 и ВозвестиВКвадрат) и сильно экономя на количестве кода.

P.S. @admin перенесите всё же в помощь новичкам, пожалуйста.

1 лайк

Почти, это методы для последовательностей. А массивы это 1 из видов последовательностей, поэтому для них работает.

Если Вы не думаете, конечно, что PascalABC.NET - это из языков “пришел - и через 5 минут спец”, то начните с простого: девяти видеолекций от разработчика.

Лекция 1. https://youtu.be/U65-SebSaj416
Лекция 2. https://youtu.be/Bqfpddge2c04
Лекция 3. https://youtu.be/dC05q_CIIe42
Лекция 4. https://youtu.be/ywFGkKkA3r4
Лекция 5. https://youtu.be/V4jbPonynAU
Лекция 6. https://youtu.be/wFcAq-1mnx0
Лекция 7. https://youtu.be/FCM_YaZyWVQ
Лекция 8. https://youtu.be/lE05l_RYqsc
Лекция 9. https://youtu.be/AjtBMQ26YPc

Без этого материала при попытке писать программы будете себя чувствовать примерно так, как описано в “12 стульях”:

…посетители сперва ударялись о кассу, а потом на них падал скелет. Беременные женщины были очень недовольны…

1 лайк

Воот, это уже ближе к телу =). Благодарю за ссылки. Уже немного посмотрел – нравитца! Конечно я не думаю, что стану спецом в паскале за 5 минут. Может быть…:roll_eyes: за десять?:grinning:

Надо сделать специальную простую презентацию по лямбдам

Нашёл отличное эссе по теме недавней дискуссии в этой ветке с ответами на многие мои вопросы.

stolyarov_2010 (1).pdf (245,3 КБ)

1 лайк

Интересная презентация, причём с 2010 года позиция Автора сильно укрепилась: “Hello, World!” на Паскале выглядит уже не так

Program HelloWorld;
Begin
  WriteLine('Hello, World!');
End.

а так:

Begin
  WriteLine('Hello, World!');
End.

А C/C++ и ныне там.

begin
  Println('Hello, World!')
end.

За Write/Writeln без причины - минус в карму :smile:

P.S. Точку с запятой перед end ставят только упёртые С-маны

Ну, Вы считаете, что позиция автора в целом совпадает с вашей позицией?

Нет, конечно. Она, скорее, совпадает с вашей.

Если по тексту, мне не нравится эта позиция и она мне кажется устаревшей.

Но даже дело не в этом. Я считаю, что существуют разные модели обучения у разных преподавателей и вполне успешные. И надо давать право на их существование даже если ты не согласен. Личность преподавателя там порой перевешивает все минусы. Несомненно, существует много неуспешных моделей.

Что касается меня, то я примерно с 2000 года не могу принимать Паскаль в облике Free pascal. Собственно, моё мнение о том, что он устарел уже тогда трансформировалось в создание нашей системы.

Наши студенты в 1 семестре сейчас активно работают с последовательностями, оператором yield, лямбдами, захватом переменных. Как это сделать на С и уж тем более на FP - ума не приложу

А оно надо - над этим думать? Для чего тогда было PascalABC.NET разрабатывать?

Главное, что я для себя вынес, это аргументы за Pascal против Си. Остальное уже детали.

А разве между Writeln и Println есть разница? Или она такая же, как с синей изолентой? :joy:

А зачем думать на устаревшую тему?

Но ведь автор статьи не говорил ничего о каком именно паскале речь.

Разработчик говорит, что Print - основной вызов. Неужели я обязательно должен домогаться во всем от разработчиков объяснений? Сказали - значит, так надо.

Значит я что-то пропустил…

Не факт, что это было на форуме. В силу определенных обстоятельств у меня еще есть другие каналы общения.

Ну я же не знал об этом… Но всё же, есть ли какая-то существенная разница? Мне кажется, Print/PrintLn ввели за красивое название из Питона.