Форум программистов, компьютерный форум, киберфорум
D (DLang)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.68/104: Рейтинг темы: голосов - 104, средняя оценка - 4.68
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446

Возможно ли написать калькулятор на D почти в одну строчку?

13.03.2015, 00:31. Показов 22598. Ответов 102
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я экспериментировал с типом данных TypeTuple и решил попробовать написать с помощью него простой калькулятор, который смог бы парсить скобки и вычислять значение выражений.
C++
1
2
3
4
5
6
7
8
9
import std.stdio;
import std.typetuple;
 
void main() {
 
    auto a = TypeTuple!(2 * (2 + 1));
 
    writeln(a); // prints 6
}
Но я столкнулся с проблемой ввода данных для TypeTuple:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
import std.stdio;
import std.typetuple;
 
void main() {
 
    string s;
 
    readf(" %s\n", &s);
 
    auto a = TypeTuple!(s);
 
    writeln(a); // prints 2 * (2 + 1)
}
Возможно ли как-то "срезать" кавычки со строки s?
1
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
13.03.2015, 00:31
Ответы с готовыми решениями:

Калькулятор в одну строчку
Нашел на Форуме. Немного переделал, добавил и изменил. В функциях Cos,Sin,Tan вместо Radian, градусы. С уважением,...

Одну строчку немогу написать
Объявлены структура, описывающая точку в пространстве TPoint и массив точек Points: struct TPoint { int X; int Y; ...

написать одну строчку кода:
Сам пример на рисунке: я не понимаю как написать верхнюю и нижнюю строку там где X^2 надо куда то втулить j+1 я не знаю как записать сам...

102
Антикодер
Эксперт функциональных языков программирования
1888 / 870 / 48
Регистрация: 15.09.2012
Сообщений: 3,088
13.03.2015, 04:33
Студворк — интернет-сервис помощи студентам
собственно это и требуется от правильного калькулятора.
То есть класс std.rational реализован, работает, но статус этого класса не понятен. Правда проблема, в любом случае сама собой разрешится со временем. Просто хочется ускорить этот процесс.
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
13.03.2015, 04:49  [ТС]
Цитата Сообщение от XRuZzz Посмотреть сообщение
но статус этого класса не понятен.
Да, этот класс даже не стоит в рассмотрении на включение:
Review_Queue
Цитата Сообщение от XRuZzz Посмотреть сообщение
Просто хочется ускорить этот процесс.
Чтобы ускорить этот процесс, задайте вопрос на dlang.org: "Когда включат std.rational в стандарт?". Поверьте, Александреску прочитает и, может быть...
P.S. Видел я, как вы создали тему. Даже не попытались ничего объяснить (даже пользователь, который отлично знает математику, не смог вам помочь).

Хотя, может быть, вот оно:
std.halffloat
0
Антикодер
Эксперт функциональных языков программирования
1888 / 870 / 48
Регистрация: 15.09.2012
Сообщений: 3,088
13.03.2015, 04:54
зато в процессе обсуждения сам разобрался чего мне нужно.
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
13.03.2015, 04:56  [ТС]
Цитата Сообщение от XRuZzz Посмотреть сообщение
зато в процессе обсуждения сам разобрался чего мне нужно.
И то хорошо.
А вопрос вы задайте, чтобы дело пошло.
0
Антикодер
Эксперт функциональных языков программирования
1888 / 870 / 48
Регистрация: 15.09.2012
Сообщений: 3,088
13.03.2015, 05:21
так там же много тем с названием std.rational надо сначала их прочитать, и если нет ответа поднимать тему снова, не вижу смысла плодить темы. Шаблон класса Currencies позволяет мне подождать пока вопрос сам собой утрясётся. Для меня пока тема Проектирование основы для разработки консольных приложений куда важнее.

Добавлено через 13 минут
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
P.S. Видел я, как вы создали тему. Даже не попытались ничего объяснить (даже пользователь, который отлично знает математику, не смог вам помочь).
Я реально не понимал, как можно не понять, что мне нужно. Они что валюты никогда не видели? Почему то по названию темы std.rational всем сразу ясно, что нужно получить в итоге. Получается мне нужно было назвать тему std.currency? Как для меня очевидно, что если мы считаем валюту, то нужно создать тип Валюты для начала.

программисты там все, а как они деньги считают - великая загадка. я конечно понимаю, они такие богатые, что доли копеек им считать не интересно. Но кого то же должно это интересовать...
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
13.03.2015, 05:35  [ТС]

Не по теме:

Цитата Сообщение от XRuZzz Посмотреть сообщение
я конечно понимаю, они такие богатые, что доли копеек им считать не интересно. Но кого то же должно это интересовать...
Я теперь понял, как легально воровать деньги. :D


Цитата Сообщение от XRuZzz Посмотреть сообщение
так там же много тем с названием std.rational надо сначала их прочитать, и если нет ответа поднимать тему снова
Хорошо, я завтра (т. е. сегодня, учитывая то, что я сутки не спал) прочитаю темы с названием std.rational и расскажу вам, в чём там суть.
0
13.03.2015, 06:11

Не по теме:

Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
Хорошо, я завтра (т. е. сегодня, учитывая то, что я сутки не спал) прочитаю темы с названием std.rational и расскажу вам, в чём там суть.
я как раз пишу прогу для того, чтоб она следила за режимом сна. Это очень важно. Так что готов предоставить для тестирования и создания пожеланий к функционалу. Но она очень примитивна, пока что.

0
13.03.2015, 15:01  [ТС]

Не по теме:

Цитата Сообщение от XRuZzz Посмотреть сообщение
я как раз пишу прогу для того, чтоб она следила за режимом сна.
Если она на D, то могу протестировать на себе. :)

0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
19.03.2015, 02:09
Цитата Сообщение от XRuZzz Посмотреть сообщение
Даже как то не встречал, пакеты, которые позволяли бы использовать обычную консоль.
Старинный юниксовый bc, со своим собственным си подобным dsl. Работает из коробки (по крайней мере должен) в любом линуксе.
1
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
23.03.2015, 08:49  [ТС]
А, может быть, с помощью миксинов можно написать калькулятор в одну строчку? Проблема опять заключается в представлении арифметических операций.
C++
1
2
3
4
5
6
7
8
9
10
import std.stdio : readf, writeln;
 
void main() {
    
    int a, b, c;
 
    readf("%s %s %s", &a, &b, &c); // 1 2 3
 
    writeln(mixin(`a + b + c`)); // 6
}
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
23.03.2015, 09:31
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
написать калькулятор в одну строчку
Вы слышали что такое разбор выражения? Какие однострочники? Проснитесь уже.
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
23.03.2015, 10:17  [ТС]
Цитата Сообщение от castorsky Посмотреть сообщение
Вы слышали что такое разбор выражения?
Думаете, что невозможно в языке программирования создать типы данных, которые смогли бы хранить арифметические знаки?
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
23.03.2015, 12:08
во-первых я не понял к чему этот вопрос, во-вторых я понял что о разборе выражений Вы ничего не слышали.
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
23.03.2015, 12:13  [ТС]
Цитата Сообщение от castorsky Посмотреть сообщение
во-вторых я понял что о разборе выражений Вы ничего не слышали.
Ну про польскую нотацию давно уже знаю, даже как-то программировал.
Цитата Сообщение от castorsky Посмотреть сообщение
во-первых я не понял к чему этот вопрос
Так не нужны тогда будут ваши разборы выражений, если будут переменные для хранения арифметических операций.
0
Супер-модератор
Эксперт функциональных языков программированияЭксперт Python
 Аватар для Catstail
38161 / 21096 / 4306
Регистрация: 12.02.2012
Сообщений: 34,679
Записей в блоге: 14
23.03.2015, 12:21
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
Так не нужны тогда будут ваши разборы выражений, если будут переменные для хранения арифметических операций.
- а можно подробее? Что представляют собой "переменные для хранения операций" и как они могут заменить разбор выражений?
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
23.03.2015, 12:52  [ТС]
Цитата Сообщение от Catstail Посмотреть сообщение
Что представляют собой "переменные для хранения операций" и как они могут заменить разбор выражений?
Не знаю, возможно ли реализовать это в каком-нибудь языке программирования, но мне хотелось бы иметь такую возможность:
C++
1
2
3
4
5
6
7
8
import std.stdio;
 
void main() {
    
    arifm n = "+";
 
    writeln(5 n 9); // 14
}
P.S. Надеюсь, что идея понятна.
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
23.03.2015, 13:06
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
Так не нужны тогда будут ваши разборы выражений, если будут переменные для хранения арифметических операций
то есть из потока ввода мы извлекаем не буфер байт, а уже готовое к вычислению дерево? Это что за такая фантастика? Попробуйте оттулкнуться что ввод - это буфер с информацией, эту информацию надо разобрать посимвольно/побайтово и на ее основе построить синтаксическое дерево (одним словом - распарсить), а потом это дерево вычислить. Собственно это и есть разбор выражения.
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
Надеюсь, что идея понятна.
каким образом узнать арность функции, отличить функции от переменных/констант?
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
23.03.2015, 13:20  [ТС]
Цитата Сообщение от castorsky Посмотреть сообщение
каким образом узнать арность функции, отличить функции от переменных/констант?
Ну это не моя проблема. Я в данный момент не занимаюсь разработкой языков.
0
 Аватар для castorsky
1978 / 1082 / 87
Регистрация: 29.11.2013
Сообщений: 3,353
23.03.2015, 13:32
Цитата Сообщение от Dennis Ritchie Посмотреть сообщение
Ну это не моя проблема. Я в данный момент не занимаюсь разработкой языков.
Я Вам кое-что поясню. Написать калькулятор это - разработать интерпретатор математический выражений. С этого и начинается реализация языков, т.к. математическое выражение это выражение на языке математики. Т.е. Вы отделяя математический язык от любого другого глубоко ошибаетесь.
0
 Аватар для Dennis Ritchie
555 / 148 / 58
Регистрация: 27.07.2014
Сообщений: 2,446
23.03.2015, 13:39  [ТС]
Цитата Сообщение от castorsky Посмотреть сообщение
Написать калькулятор это - разработать интерпретатор математический выражений.
Так я и хотел именно это сказать, что нужно в компилятор встроить интерпретатор, который будет "маслать, якобы в compile time" арифметические выражения, если используется ключевое слово, например, arifm. В компилятор D уже встроен (раньше я думал, что он разделён с компилятором, а потом прочитал в книге Александреску) интерпретатор, который облегчает вычисления в compile time.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
23.03.2015, 13:39
Помогаю со студенческими работами здесь

Возможно ли на vbs написать калькулятор?
Всем привет! Я не силен в этой сфере,но хотелось бы участвовать или наблюдать процесс написания,дабы получить в будующем возможность...

Js в одну строчку
Подскажите готовые сервисы через которые можно пропустить js и получить на выходе js код в одну строчку.

перевести одну строчку на с++
case (operation_list.ItemIndex) of 0: ..............

Перевести одну строчку с С++ в С
помогите перевести cout << (i == 0 || j == 0 || i == N + 1 || j == M + 1 ? (char)178 : a) << (j <= M ? "" : "\n"); С++ не проходила,...

Текст в одну строчку
Можно ли весь код сайта начиная от <!DOCTYPE html><html> и кончая </body></html> вывести в одну строчку. Как например это сделано у Яндекс?...


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

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru