Этот метод разбивает строку на символы
забавно, что это на выводе никак не отразилось. Вы бы не написали, дак и не заметил бы
Выведите через Write. Print при выводе последовательности символов не делает по умолчанию пробела между ними, у него разделитель при этом - пустая строка.
уже вижу исходник этого метода.
для чего такие ухищрения интересно… да и не написано нигде про это, как я понимаю
для совместимости с Делфи
Подождите ка, а в делфи есть .Print
?
Нет. Но идеологически Print - это тот же Write. Вывод. Если нужны совсем уж детали - это к разработчикам, пусть Вам объяснят, почему исторически было принято такое решение. Для меня это просто факт: оно вот так работает. И так работало в РАВС всегда. В свое време мне было полушутя сказано, что если я не могу понять логику чего-то - значит это сделано в целях совместимости [с Delphi].
Уважаемые форумчане! Подскажите, пожалуйста, аналог функции eval() из Python
print(eval('(2+13)*4-28*(329/(23-17))'))
{$reference System.Data.dll}
## Print(System.Data.DataTable.Create.Compute('2+2*2',''))
Если нужно из нескольких мест обращаться, можно сократить немного:
{$reference System.Data.dll}
##
var obj := new System.Data.DataTable;
Println(obj.Create.Compute('2+2*2', ''));
Print(obj.Create.Compute('(2+13)*4-28*(329/(23-17))', ''))
Спасибо, но после такого дети выбирают Python.
Да ради бога, если для детей решающим аргументом в выборе языка является длина записи скрипта для вычисления значения выражения, вводимого с клавиатуры, пусть выбирают хоть Пайтон, хоть волшебную палочку Гарри Поттера.
Ничто не мешает написать простенькую функцию-обертку Eval(expr:string):string
+ сделать аналогичное расширение для типа string и добавить все это либо в стандартную библиотеку, либо в School.pcu и под ##. Тогда все будет по фэн-шую, даже лучше, чем в Питоне:
## ReadlnString('Введите выражение для расчета:').Eval.Print
Вот только это массово никому не нужно…
Предлагаю
## print((2+13)*4-28*(329/(23-17)))
и не морочить голову
Я полагаю, что идея была все-таки в написании программы для ручного интерактивного ввода детьми произвольного выражения и его расчете, как на продвинутом калькуляторе, а не просто вывод результата в IDE.
Эта специфическая задача просто решается учителем информатики - он создаёт простой модуль и в него помещает функцию eval - код был выше. Это - методическое сопровождение.
У Питона eval - глубже и не для того. И его eval возможен только в скриптовых языках.
Я бы сказал, что подобные eval возможны только в интерпретаторах, чтобы не привязываться к ныне весьма расплывчатому определению скриптового языка. Например, популярный некоторое время назад язык СУБД FoxPro (и Visual FoxPro) содержал команду вида &x, где x - символьная строка, содержащая любой корректный оператор языка, в том числе, вычисление и вывод произвольного выражения. Никакой компилятор не в состоянии построить более-менее эффективный код для подобной конструкции уже хотя бы потому, что для этого придется в код поместить фактически дубликат СУБД. Еще пример - оператор FORMAT в Fortran. В нем можно сослаться на любую строку, содержащую формат ввода, т.е. входные данные в состоянии сами определить, каким будет дальнейший формат ввода. И для реализации этого Фортран во время исполнения кода держит в оперативной памяти небольшой интерпретатор форматов.
Нужно ли подобное РАВС? На мой взгляд - однозначно нет.
Я согласен с этим мнением поддерживаю.