Форум программистов, компьютерный форум, киберфорум
Теория и практика программирования
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.55/11: Рейтинг темы: голосов - 11, средняя оценка - 4.55
5 / 7 / 2
Регистрация: 26.05.2015
Сообщений: 81
1

Существует ЯП с символьными вычислениями встроенными в сам язык по типа препроцессора?

25.06.2015, 16:28. Показов 2186. Ответов 58
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Собсно, языки развиваются, появляются новые, но все изменения и новшества какие-то довольно простенькие.
Почему нет подобного языка?

Представьте себе какбы было бы удобно написать например что-то вроде:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class Circle
{
private:
    float r;
 
public:
 
    float getRadius() { return r; }
    void setRadius(float value) { r = value; }
 
    float getArea() { return PI * r ** 2; }
    void setArea(float value) { find(getArea, r); }
}
Последняя строчка:
C++
1
    void setArea(float value) { find(getArea, r); }
скрыто от программиста автоматически преобразовывалась бы в:
C++
1
    void setArea(float value) { r = sqrt(value / PI); }
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
25.06.2015, 16:28
Ответы с готовыми решениями:

Новые ЯП: существует ли язык программирования лучше чем C++, а если нет, то появится ли через 2-3 года такой язык?
Привет, зашёл на сайт, увидел C++ и подумал: Существует ли ЯП лучше чем C++, или появится ли через...

Вернуть значение типа int за счет директив препроцессора
основной текстовый документ. #include "mystring.h" #include <iostream> using namespace std; ...

Язык добавляется автоматически сам
Привет. Проблема такая. В настройках стоит два языка, а в панели 3. В итоге приходится два раза...

Язык интерфейса меняется сам по себе
Установил на ноут Win7 x64, установил все драйвера, теперь после включения ноута через минуту после...

58
75 / 1 / 1
Регистрация: 24.06.2015
Сообщений: 16
29.06.2015, 15:28 41
Author24 — интернет-сервис помощи студентам
castorsky, зато преобразование строк из примера в начале этой ветки осуществляется проще простого.
А, по-моему, именно это ищет WebRion.
0
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
29.06.2015, 15:32 42
Вы не поняли. Автор выделяется религиозным фанатизмом.
0
5 / 7 / 2
Регистрация: 26.05.2015
Сообщений: 81
29.06.2015, 15:44  [ТС] 43
Цитата Сообщение от castorsky Посмотреть сообщение
Вы не поняли. Автор выделяется религиозным фанатизмом.
Касторский, вы меня достали, честно. Идите со своим ЛИСПом в соответствующую тему.
0
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
29.06.2015, 15:56 44
Эта ветка называется "теория и практика программирования". Так что это Вы идите со своим сиплюсплюсом в соответствующую тему и скажите "мне надо символьные вычисления на крестах!". Только боюсь что Вас опять отправят в лисп раздел. А если попадутся бездари (коими тот раздел кишмя кишит) то будут в угоду Вашим фантазиям размышлять о том как чесать левое ухо правой пяткой.
0
5 / 7 / 2
Регистрация: 26.05.2015
Сообщений: 81
29.06.2015, 15:58  [ТС] 45
Цитата Сообщение от castorsky Посмотреть сообщение
А если попадутся бездари (коими тот раздел кишмя кишит)
Вы слишком низкого мнения о себе.
0
Заблокирован
29.06.2015, 16:00 46
Цитата Сообщение от WebRion Посмотреть сообщение
Expression - это конструктор "сделай сам", в нем ничего нет.
WebRion, так на то он и ЯП, чтобы вы сделали сами то, что вам нужно
0
93 / 19 / 5
Регистрация: 06.06.2015
Сообщений: 99
29.06.2015, 16:03 47
Цитата Сообщение от castorsky Посмотреть сообщение
идите со своим сиплюсплюсом в соответствующую тему
Справедливости ради не могу не заметить, что символьные вычисления можно реализовать на шаблонной магии.

http://web.info.uvt.ro/~oarito... ompile.pdf
0
Модератор
Эксперт функциональных языков программирования
3051 / 2193 / 459
Регистрация: 26.03.2015
Сообщений: 8,469
29.06.2015, 18:45 48
ТС так и не дал внятного объяснения, какую фичу он хочет.
Исходя из тех объяснений, что я видел, я не могу даже сделать вывод, полезная это фича или вредная.

В частности, из первого примера мне не ясно:
- какие требования к функции getArea (какие конструкции языка в ней можно использовать?)
- что делать, функция find не найдёт решения или найдёт несколько решений или не существует символьного решения
- как мне взглянуть на внешний вид результата (например, чтобы принять решение, стоит ли кэшировать результат или промежуточные результаты)
- что делать, если мне не нужна функция getArea, но нужна функция setArea (getRadius)
- что делать, если символьные вычисления занимают много времени (по сути вычисления нужны один раз, а не при каждой компиляции)
... полагаю, в процессе формулировки требований возникли бы ещё вопросы
0
5 / 7 / 2
Регистрация: 26.05.2015
Сообщений: 81
29.06.2015, 19:37  [ТС] 49
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
WebRion, так на то он и ЯП, чтобы вы сделали сами то, что вам нужно
Ахах. Ну да, дело за малым. Ассемблер у тя уже есть.
Цитата Сообщение от Shamil1 Посмотреть сообщение
- что делать, функция find не найдёт решения или найдёт несколько решений или не существует символьного решения
Ну в вышеприведенном примере всегда существует одно решение. Но даже если и возникнет несколько - это уже вопрос к программисту - он может сам выбирать, допустим, первое. В любом случае, это все уже детали реализации. Смысл лишь в том, что такого рода функций просто нет.

Цитата Сообщение от Shamil1 Посмотреть сообщение
- что делать, если символьные вычисления занимают много времени (по сути вычисления нужны один раз, а не при каждой компиляции)
Так же как и сейчас реализована компиляция на сях. Компилируются лишь изменения если они есть.
0
Модератор
Эксперт функциональных языков программирования
3051 / 2193 / 459
Регистрация: 26.03.2015
Сообщений: 8,469
01.07.2015, 16:29 50
Цитата Сообщение от WebRion Посмотреть сообщение
Ну в вышеприведенном примере всегда существует одно решение. Но даже если и возникнет несколько - это уже вопрос к программисту - он может сам выбирать, допустим, первое. В любом случае, это все уже детали реализации. Смысл лишь в том, что такого рода функций просто нет.
А как программист узнает, сколько решений и как они выглядят?

Цитата Сообщение от WebRion Посмотреть сообщение
Так же как и сейчас реализована компиляция на сях. Компилируются лишь изменения если они есть.
Ни разу не слышал, чтобы можно было в файле скомпилировать только некоторые функции, а для остальных взять результат предыдущей компиляции.
0
5 / 7 / 2
Регистрация: 26.05.2015
Сообщений: 81
02.07.2015, 14:43  [ТС] 51
Цитата Сообщение от Shamil1 Посмотреть сообщение
А как программист узнает, сколько решений и как они выглядят?
В смысле как узнает? Ничего не детерминированного в таких преобразованиях нет.

Цитата Сообщение от Shamil1 Посмотреть сообщение
Ни разу не слышал, чтобы можно было в файле скомпилировать только некоторые функции, а для остальных взять результат предыдущей компиляции.
Все что угодно можно кешировать. На сях по файлам, а не по функциям.
0
Модератор
Эксперт функциональных языков программирования
3051 / 2193 / 459
Регистрация: 26.03.2015
Сообщений: 8,469
02.07.2015, 16:43 52
Цитата Сообщение от WebRion Посмотреть сообщение
В смысле как узнает? Ничего не детерминированного в таких преобразованиях нет.
Если я не умею решать подобные уравнения, то как я узнаю, как выглядит решение, глядя на уравнение?
Кроме того, мне нужно знать, на какой области сколько решений есть.
Что произойдёт, если я вызову функцию setArea с отрицательным аргументом?
Кликните здесь для просмотра всего текста
Если бы я знал, что она определена только для неотрицательных чисел, я бы добавил проверку и вывод пользователю дружелюбного сообщения об ошибке (с описанием проблемы и предложением методов её решения). А тут я смогу вывести только что-то типа "внутренняя ошибка, обратитесь к администратору".
Более того, не факт, что подобную ошибку обнаружат при тестировании. Особенном если функция определена везде, кроме одной точки. Например, если ответ выглядит как min(x, 1/(x - 2.75)).


Цитата Сообщение от WebRion Посмотреть сообщение
Все что угодно можно кешировать. На сях по файлам, а не по функциям.
Предлагаете выносить один метод из класса в отдельный файл?
К тому же в некоторых языках компилятор требует, чтобы определение класса было в одном файле.
0
5 / 7 / 2
Регистрация: 26.05.2015
Сообщений: 81
02.07.2015, 18:12  [ТС] 53
Цитата Сообщение от Shamil1 Посмотреть сообщение
Если я не умею решать подобные уравнения, то как я узнаю, как выглядит решение, глядя на уравнение?
Если вы не умеете решать подобные уравнения, то как вы в ручную собираетесь их решать?

Цитата Сообщение от Shamil1 Посмотреть сообщение
Что произойдёт, если я вызову функцию setArea с отрицательным аргументом?
Это зависит от того что умеет считать sqrt. Тоже самое что и если вы напишите соответствующий код руками - ошибка.
Теоретически если подключена библиотека с комплексными числами, то получите комплексное решение, если вам не нужны комплексные корни, то как и хотели - вставьте проверку на отрицательность перед вызывом find.

Цитата Сообщение от Shamil1 Посмотреть сообщение
Предлагаете выносить один метод из класса в отдельный файл?
К тому же в некоторых языках компилятор требует, чтобы определение класса было в одном файле.
Сейчас в сях компиляция происходит при обновлении файла - поменяли что-то в файле, значит будет перекомпилировано. Вроде никто не жалуется. Тут тоже самое.
0
Модератор
Эксперт функциональных языков программирования
3051 / 2193 / 459
Регистрация: 26.03.2015
Сообщений: 8,469
02.07.2015, 19:28 54
Цитата Сообщение от WebRion Посмотреть сообщение
Если вы не умеете решать подобные уравнения, то как вы в ручную собираетесь их решать?
Я уже писал как: вобью формулу в специализированную программу и получу результат.

Цитата Сообщение от WebRion Посмотреть сообщение
Это зависит от того что умеет считать sqrt. Тоже самое что и если вы напишите соответствующий код руками - ошибка.
Не зависит. В коде явно написано float. На отрицательных числах float не получится.
Когда я буду писать код руками, я увижу, что на отрицательных числах будет ошибка.

Цитата Сообщение от WebRion Посмотреть сообщение
если вам не нужны комплексные корни, то как и хотели - вставьте проверку на отрицательность перед вызывом find.
Как мне догадаться, что функция будет падать на отрицательных числах? Или Вы предлагаете сначала решить уравнение самому "вручную" (на листочке или в специализированной программе), а потом в код программы на С++ вместо решения, которое мне уже известно, вставить уравнение... что займёт столько же времени.

Цитата Сообщение от WebRion Посмотреть сообщение
поменяли что-то в файле, значит будет перекомпилировано. Вроде никто не жалуется. Тут тоже самое.
А теперь представьте, что я пишу класс... и каждый раз при компиляции уравнение решается заново.
Если эти вычисления занимают 10 минут, то жалобы будут.
0
5 / 7 / 2
Регистрация: 26.05.2015
Сообщений: 81
02.07.2015, 20:00  [ТС] 55
Цитата Сообщение от Shamil1 Посмотреть сообщение
Я уже писал как: вобью формулу в специализированную программу и получу результат.
В какую вобьете? И какой результат - символьный или числовой?

Цитата Сообщение от Shamil1 Посмотреть сообщение
Не зависит. В коде явно написано float. На отрицательных числах float не получится.
Когда я буду писать код руками, я увижу, что на отрицательных числах будет ошибка.
Каким образом вы увидите что на отрицательных будет ошибка - вы собираетесь функцию sqrt писать?

Цитата Сообщение от Shamil1 Посмотреть сообщение
Как мне догадаться, что функция будет падать на отрицательных числах?
А как вы сейчас догадываетесь что sqrt падает на отрицательных числах не видя тела функции?

Цитата Сообщение от Shamil1 Посмотреть сообщение
Или Вы предлагаете сначала решить уравнение самому "вручную" (на листочке или в специализированной программе), а потом в код программы на С++ вместо решения, которое мне уже известно, вставить уравнение... что займёт столько же времени.
Я не понимаю проблемы. Вышеперечисленные вами "неудобства" применимы к любой библиотечной функции вообще, которая для вас "черный ящик", но проблемы почему то должны вызывать с какого-то перепугу именно символьные.

Цитата Сообщение от Shamil1 Посмотреть сообщение
А теперь представьте, что я пишу класс... и каждый раз при компиляции уравнение решается заново.
Если эти вычисления занимают 10 минут, то жалобы будут.
Причем здесь класс? Вам и так и сяк компилировать его придется. Потом если вам уж вообще скорость нужна, то кешировать можно и по функциям. В IntelliJ IDEA вообще код компилиться налету - что-то поменял, сразу увидел ошибку.
0
Модератор
Эксперт функциональных языков программирования
3051 / 2193 / 459
Регистрация: 26.03.2015
Сообщений: 8,469
02.07.2015, 23:43 56
Цитата Сообщение от WebRion Посмотреть сообщение
В какую вобьете? И какой результат - символьный или числовой?
Лично я запущу http://www.wolframalpha.com/
Тот, кому это реально часто требуется, запустит что-то покруче - марпл, математика и т.п. - я не знаю, так как не разбираюсь в этом
Разумеется символьный результат. Зачем мне числовой, если я, фактически, составляю алгоритм решения задачи.

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

Цитата Сообщение от WebRion Посмотреть сообщение
Я не понимаю проблемы. Вышеперечисленные вами "неудобства" применимы к любой библиотечной функции вообще, которая для вас "черный ящик", но проблемы почему то должны вызывать с какого-то перепугу именно символьные.
Про библиотечные функции я могу прочитать, какие исключения и в каких случаях она бросает.
Кроме того, библиотечные функции компилируются, а символьные формулы вычисляются. Вычисления могут занимать любое количество времени, в зависимости от сложности задачи.

Цитата Сообщение от WebRion Посмотреть сообщение
Причем здесь класс? Вам и так и сяк компилировать его придется. Потом если вам уж вообще скорость нужна, то кешировать можно и по функциям. В IntelliJ IDEA вообще код компилиться налету - что-то поменял, сразу увидел ошибку.
Класс при том, что я не могу метод, использующий символьные вычисления, вынести в другой файл.
Постарайтесь всё-таки разобраться в отличиях вычислений от компиляции.
1
5 / 7 / 2
Регистрация: 26.05.2015
Сообщений: 81
03.07.2015, 03:12  [ТС] 57
Цитата Сообщение от Shamil1 Посмотреть сообщение
Лично я запущу http://www.wolframalpha.com/
И каким образом вы, получив символьный результат, собираетесь узнать область определения? И самое главное - каким образом вы собираетесь отбирать результаты, ведь все они верные.

Цитата Сообщение от Shamil1 Посмотреть сообщение
Я знаю про многие функции их область определения. А про которые не знаю, могу в инете посмотреть.
Цитата Сообщение от Shamil1 Посмотреть сообщение
Про библиотечные функции я могу прочитать, какие исключения и в каких случаях она бросает.
Ну так и здесь посмотрите и почитаете.

Цитата Сообщение от Shamil1 Посмотреть сообщение
Класс при том, что я не могу метод, использующий символьные вычисления, вынести в другой файл.
Постарайтесь всё-таки разобраться в отличиях вычислений от компиляции.
Тут не понял. Ладно, проехали.
0
Модератор
Эксперт функциональных языков программирования
3051 / 2193 / 459
Регистрация: 26.03.2015
Сообщений: 8,469
03.07.2015, 16:00 58
Цитата Сообщение от WebRion Посмотреть сообщение
И каким образом вы, получив символьный результат, собираетесь узнать область определения?
Я уже писал: "Я знаю про многие функции их область определения. А про которые не знаю, могу в инете посмотреть."

Цитата Сообщение от WebRion Посмотреть сообщение
И самое главное - каким образом вы собираетесь отбирать результаты, ведь все они верные.
Вы когда-нибудь писали программы?
Если да, то каким образом Вы выбирали подходящий алгоритм?
Вот и тут примерно так же. Ведь, как я уже писал, по сути это этап составления алгоритма.
В разные дни выбор может быть разным. Иногда ищешь по-быстрее, иногда по-проще и так далее.

Цитата Сообщение от WebRion Посмотреть сообщение
Ну так и здесь посмотрите и почитаете.
Вы сравниваете две вещи: "узнать область определения функции" и "узнать, какие решения могут быть у уравнения, которое я не могу даже классифицировать".
Я уже писал: "Или Вы предлагаете сначала решить уравнение самому "вручную" (на листочке или в специализированной программе), а потом в код программы на С++ вместо решения, которое мне уже известно, вставить уравнение... что займёт столько же времени."

Цитата Сообщение от WebRion Посмотреть сообщение
Тут не понял. Ладно, проехали.
Не поняли разницу между вычислениями и компиляцией?
В общем случае символьные вычисления - это поиск по бесконечному дереву состояний, которые можно получить из начального состояния с помощью заданного списка допустимых преобразований. И этот процесс может занять очень много времени.
0
5 / 7 / 2
Регистрация: 26.05.2015
Сообщений: 81
03.07.2015, 21:24  [ТС] 59
Цитата Сообщение от Shamil1 Посмотреть сообщение
Я уже писал: "Я знаю про многие функции их область определения. А про которые не знаю, могу в инете посмотреть."
Область определения вам придется высчитывать, так как символьный результат наврятли у вас часто будет единственной элементарной функцией, а в инете вам не будут расписывать область определения на все случаи жизни.

Цитата Сообщение от Shamil1 Посмотреть сообщение
Вы когда-нибудь писали программы?
Если да, то каким образом Вы выбирали подходящий алгоритм?
Вот и тут примерно так же. Ведь, как я уже писал, по сути это этап составления алгоритма.
В разные дни выбор может быть разным. Иногда ищешь по-быстрее, иногда по-проще и так далее.
Да, 15 лет уже. Вы и сейчас не выбираете алгоритм sqrt - он для вас "черный ящик". Хотя лет 30 назад - выбирали бы.

Цитата Сообщение от Shamil1 Посмотреть сообщение
Не поняли разницу между вычислениями и компиляцией?
В общем случае символьные вычисления - это поиск по бесконечному дереву состояний, которые можно получить из начального состояния с помощью заданного списка допустимых преобразований. И этот процесс может занять очень много времени.
Откуда взялась бесконечность?? Если количество правил преобразований - конечно.
0
03.07.2015, 21:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.07.2015, 21:24
Помогаю со студенческими работами здесь

Сам собой меняется язык интерфейса
У пользователя сам собой меняется язык интерфейса. С чем это может быть связано?

Директивы препроцессора Составить программу, использующую директивы препроцессора
1) Задать константы M1,M2,...,M5 и вычислить M1+ 2M2 + 3M3 + 4M4 + 5M5 2) С помощью директив #if,...

Подскажите, как перевести сам сайт joomla 2.5 на русский язык? два дня не получается
Добрый день! Я - новичок в программировании. Второй день пытаюсь "перевести" сайт с английского...

Существует ли в PHP возможность или код, способный принудительно переключать язык ввода в формах html
Есть база данных на MySQL, хранящая в отдельных таблицах клиентов на русском, английском,...

Имя типа не существует в типе
Сохдаю программку WCF. Подключил Serv/ References и тут началось: имя типа не существует в типе...

Типа денвера, что-то существует?
Типа денвера, что-то существует для локальной работы?


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
59
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru