Понятия переменной в математике и программировании существенно различаются. В частности, в математике нельзя написать a=a+1. Как от математической переменной перейти к программистской и наоборот?
Собственно, я сформулировал для себя ответ на этот вопрос, но, прежде чем его обнародовать, хотелось бы убедиться, что я не ломлюсь в открытую дверь. Есть ли учебники или научные работы, где разбирается этот и/или сопутствующие вопросы?
Здравствуйте, rfq, Вы писали:
rfq>Как от математической переменной перейти к программистской и наоборот?
rfq>Собственно, я сформулировал для себя ответ на этот вопрос, но, прежде чем его обнародовать, хотелось бы убедиться, что я не ломлюсь в открытую дверь. Есть ли учебники или научные работы, где разбирается этот и/или сопутствующие вопросы?
Здравствуйте, rfq, Вы писали:
rfq>Понятия переменной в математике и программировании существенно различаются. В частности, в математике нельзя написать a=a+1. Как от математической переменной перейти к программистской и наоборот?
rfq>Собственно, я сформулировал для себя ответ на этот вопрос, но, прежде чем его обнародовать, хотелось бы убедиться, что я не ломлюсь в открытую дверь. Есть ли учебники или научные работы, где разбирается этот и/или сопутствующие вопросы?
Насчёт учемников не знаю, но в программировании такой "математический" подход хорошо известен, называется Immutable Object
Применяется обычно в функциональном программировании, но зачастую полезен и в императивном, чтобы код было проще читать.
Иными словами, "программистская" переменная есть надмножество "математической".
Здравствуйте, rfq, Вы писали:
rfq>Понятия переменной в математике и программировании существенно различаются. В частности, в математике нельзя написать a=a+1. Как от математической переменной перейти к программистской и наоборот?
В общем-то есть много разных языков программирования, и во многих из них понятие переменной определяется по-своему.
Расхождение этих понятий с математическими удивляет не только вас. Почитайте например Армстронга "Программирование на Эрланге", он там как раз об этом рассуждает (вы это высказывание не у него подчерпнули случаем?).
А вообще более-менее полноценный математический формализм можно выстроить только путем создания дополнительных уровней абстракций над конкретным языком. В конечном же итоге они все должны сводится к примитивным машинным командам.
Если нужна математика — используйте Mathematica, Maple, MATLAB и т.д.
Говорить дальше не было нужды. Как и все космонавты, капитан Нортон не испытывал особого доверия к явлениям, внешне слишком заманчивым.
rfq>Понятия переменной в математике и программировании существенно различаются. В частности, в математике нельзя написать a=a+1. Как от математической переменной перейти к программистской и наоборот?
Посмотри на уроки к Wolfram Language, по тому чем я пользовался — математическая запись там вполне естественна.
Здравствуйте, rfq, Вы писали: rfq>Понятия переменной в математике и программировании существенно различаются. В частности, в математике нельзя написать a=a+1. Как от математической переменной перейти к программистской и наоборот?
переменных в математике вообще нет.
а переменные в программировании возникают только из-за желания оптимизировать по памяти — одно значение замещает другое. мы теряем к другому доступ, но можем с этим жить, если оно нам больше и не нужно
вообще по уму переменных быть не должно. соб-но это и есть центральная идея функционального программирования, как я ее понимаю
Здравствуйте, rfq, Вы писали:
rfq>Понятия переменной в математике и программировании существенно различаются. В частности, в математике нельзя написать a=a+1. Как от математической переменной перейти к программистской и наоборот?
Ты просто версионируешь значения «a₁=a₀+1», и вместо модификации старых переменных создаёшь всё время новые константы. (Или даже целый мир, и протаскиваешь его во входящие/выходящие параметры чистых функций.) Если этого не сделаешь ты, возможно даже за тебя это сделает компилятор в промежуточном представлении.
Здравствуйте, rfq, Вы писали:
rfq>Понятия переменной в математике и программировании существенно различаются. В частности, в математике нельзя написать a=a+1. Как от математической переменной перейти к программистской и наоборот?
Сущность переменной в программировании определяется текущим ЯП целиком и полностью, и тесно связана
с целевыми для ЯП задачами и его реализацией. Приходится различать, int это, float, list, или lambda.
В математике переменная есть величина, принимающая множество значений, это чистая абстракция.
Фантазёры идут в математики, тем у кого с фантазией проблемы-в програмисты. Для последних пишутся тонны
спецификаций по ЯП, строго в соответствии с которыми они обязаны понимать и работать.
Здравствуйте, rfq, Вы писали:
rfq>Понятия переменной в математике и программировании существенно различаются. В частности, в математике нельзя написать a=a+1. Как от математической переменной перейти к программистской и наоборот?
rfq>Собственно, я сформулировал для себя ответ на этот вопрос, но, прежде чем его обнародовать, хотелось бы убедиться, что я не ломлюсь в открытую дверь. Есть ли учебники или научные работы, где разбирается этот и/или сопутствующие вопросы?
В математике переменная — это величина, принимающая значения на каком-то множестве, т.е. по сути элемент множества. Если, скажем, множество образовано из натуральных чисел (0, 1, 2, ...), элемент множества обозначен как "a", то операция "a=a+1" просто не имеет смысла. Ей (в математике) нечего сопоставить.
В программирование переменная — состояние ячейки памяти. Операция "a=a+1" изменяет состояние ячейки памяти и уже имеет смысл.
Кацца так
Приходиться заниматься гадостью — зарабатывать на жизнь честным трудом (Б.Шоу)
rfq>Понятия переменной в математике и программировании существенно различаются. В частности, в математике нельзя написать a=a+1. Как от математической переменной перейти к программистской и наоборот?
от программистской к математической -- добавить sequence id
Здравствуйте, rfq, Вы писали:
rfq>Понятия переменной в математике и программировании существенно различаются. В частности, в математике нельзя написать a=a+1. Как от математической переменной перейти к программистской и наоборот?
Использовать функциональное программирование с иммутабельными «переменными» и сопоставлением с образцом. Оно наиболее близко к мат. записи и понятиям.
Здравствуйте, rfq, Вы писали:
rfq>Понятия переменной в математике и программировании существенно различаются. В частности, в математике нельзя написать a=a+1. Как от математической переменной перейти к программистской и наоборот?
Поэтому в языке Haskell вводятся ссылки. Там ссылку ты можешь изменить в рамках вычисления, а переменную можешь только связать с неким постоянным значением. Переменную можно использовать везде, а ссылки — только внутри вычислений. Впрочем, я не уверен, что термин "переменная" часто используется в Haskell. Получается переменная, которая не меняется
rfq>Собственно, я сформулировал для себя ответ на этот вопрос, но, прежде чем его обнародовать, хотелось бы убедиться, что я не ломлюсь в открытую дверь. Есть ли учебники или научные работы, где разбирается этот и/или сопутствующие вопросы?
Советую посмотреть на чистый язык функционального программирования Haskell. Причем, что важно, он является языком общего назначения.
Здравствуйте, rfq, Вы писали:
rfq>Понятия переменной в математике и программировании существенно различаются. В частности, в математике нельзя написать a=a+1. Как от математической переменной перейти к программистской и наоборот?
не думаю, что понятия переменной отличиются.
ты не задумавался, почему в программировании есть два "равенства"? Например, операция проверки на равенство == и операция присваивания =
Или как в Паскале = и :=
a == a+1
даже в С\С++ всегда будет false
Еще вспомнил, что в Бейсике (для ZX Spectrum) операция присваивания называется LET, что переводиться как "допустим".
10 LET A = A+1
А вообще правильно написал Qbit86
P.S.: Вспомнил свои первые школьные уроки по информатике. Учитель в начале урока написал на доске i = i + 1
и сказал, что такое выражение в математики не имеет смысл, а в программировании имеет.
Я долго ломал голову над этим. В конце пришел к выводу, что подход, который использовал учитель,
только запутывает, аналогия операции присваивания с уравнениями в математике неправильная.
Поэтому, не зря, в некоторых языках программирования, операция присваивания слегка отличается по внешнему виду от равенства в математических уравнениях).
А математические уравнения описывают ограничения между текущими состояними переменных.
При этом, для данных ограничений, множество удовлетворяющих значений переменных может быть пустым (когда уравнение не имеет решений, как а=а+1),
или же их бесконечно много (например, 2+a=2+a), или одно\нескольно.
Ннапример, 2*a=5; при этом одно значение переменной а (это 2.5 ) удовлетворяет данным ограничениям.
rfq>Собственно, я сформулировал для себя ответ на этот вопрос, но, прежде чем его обнародовать, хотелось бы убедиться, что я не ломлюсь в открытую дверь. Есть ли учебники или научные работы, где разбирается этот и/или сопутствующие вопросы?
Здравствуйте, rfq, Вы писали:
rfq>Понятия переменной в математике и программировании существенно различаются. В частности, в математике нельзя написать a=a+1. Как от математической переменной перейти к программистской и наоборот?
Смотря какая математика и программирование.
В принципе, и в "почти" математике так можно написать a=a+1, только результат такой функции(=) будет false. Когда такое пишут в математике, то подразумевают Assert(a=a+1)
Есть вот нечто среднее между математикой и программированием: http://rise4fun.com/z3/tutorial
Там такая запись не лишена смысла, просто результат будет соответствующий.
(declare-const a Int)
(assert (= a (+ a 1)))
(check-sat)
Здравствуйте, rfq, Вы писали:
rfq>Понятия переменной в математике и программировании существенно различаются.
Что такое "переменная в математике"? Математика большая, про какие переменные мы говорим? Да и в разных языках программирования "переменная" означает разные вещи.
rfq>В частности, в математике нельзя написать a=a+1.
Еще как можно. Например, это можно считать частью выражения на C-подобном языке программирования, любой из которых является одним из (бесконечного) множества математических языков. Еще это можно прочитать как уравнение в какой-нибудь алгебраической системе, и у него даже может быть решение если "+" определить нужным способом. Или это предикат. Или определение фиолетовых треугольников из раздела про цветные треугольники.
Здравствуйте, rfq, Вы писали:
rfq>В частности, в математике нельзя написать a=a+1
Смотря, в какой теории. В рамках ZFC, например, — так нельзя написать исключительно потому, что символ равенства там используется для обозначения бинарного отношения (внезапно) равенства двух множеств, а в том, что ты называешь "программированием" — он обозначает операцию связывания символической переменной с каким-либо символическим или конкретным значением, что вполне можно выразить математически с помощью тривиальной (3,3)-программы для МТ
Здравствуйте, rfq, Вы писали:
rfq>Понятия переменной в математике и программировании существенно различаются. В частности, в математике нельзя написать a=a+1.
Математика бывает разной.
rfq> Как от математической переменной перейти к программистской и наоборот?
Математика состоит из огромного количества разделов, а не единой монолитной теории. Поэтому ответ на твой вопрос сильно зависит от конкретики.
... << RSDN@Home 1.0.0 alpha 5 rev. 0 on Windows 8 6.2.9200.0>>