|
2 / 2 / 0
Регистрация: 01.08.2015
Сообщений: 46
|
||||||
Применение типов20.12.2015, 10:32. Показов 3483. Ответов 67
Пытаюсь перейти от Prolog к Haskel.
Надо сделать вычисление арифметического выражения. Пишу рекурсивную программу, аналогичную Прологовской. Поскольку в списке Haskel, в отличие от Пролога, все элементы должны быть одного типа, применяю тип [String]. Приходится преобразовывать аргументы к численному представлению, а результат вычисления – обратно в символьное. Компилятор не пропускает. Что-то не правильно с объявлением типов или это методическая ошибка?
0
|
||||||
| 20.12.2015, 10:32 | |
|
Ответы с готовыми решениями:
67
Применение обнуляемых типов в C# Применение RAW типов |
|
Модератор
|
||
| 21.12.2015, 12:37 | ||
|
Интересна, так же, статья "Развитие пользовательских типов данных в программировании". Не по теме:
2
|
||
|
Супер-модератор
|
||||
| 21.12.2015, 13:58 | ||||
|
0
|
||||
|
650 / 260 / 16
Регистрация: 02.03.2014
Сообщений: 587
|
||||||
| 21.12.2015, 17:50 | ||||||
|
Специально для pycture. Добавил скобки, сохранив код. На мой взгляд получилось весьма минималистично. Минус. Разбирает только правильные выражения, и не может сообщить, что конкретно не так.
> calc "(1+ 2-( 3+1)*2)+3-1+1" -2.0 Добавлено через 7 минут Посмотрел на свой код... ну что, типизация не используется, совсем. Это плохо. Но для такого мелкого куска без разницы. Добавлено через 8 минут Catstail, скобки в немеряных количествах, там где надо и не надо. Использование списка в качестве хранилища данных. !!0 !!1 я так и вижу как у вас в голове щелкает а вот здесь должен быть car а вот здесь cadr... обращение с типами... P.S. Мой код, это пример рефаловского алгоритма выполненного на хаскеле, если что.
4
|
||||||
|
Супер-модератор
|
||
| 21.12.2015, 17:55 | ||
|
1
|
||
|
650 / 260 / 16
Регистрация: 02.03.2014
Сообщений: 587
|
|
| 21.12.2015, 17:58 | |
|
А про типы, это из спектра ощущений. Скорее я так чувствую. Вон у меня самого, код вышел не сильно хаскельным.
Добавлено через 48 секунд P.S. А от чего? Где ещё можно подцепить такую любовь к скобочкам?
0
|
|
|
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
|
|
| 21.12.2015, 18:15 | |
|
0
|
|
|
650 / 260 / 16
Регистрация: 02.03.2014
Сообщений: 587
|
|
| 21.12.2015, 18:17 | |
|
pycture, входная функция calc я же указал в посте
![]() Добавлено через 34 секунды Да, я не хороший, что меняю наименования интерфейсов, но что поделать
1
|
|
|
845 / 608 / 211
Регистрация: 24.07.2013
Сообщений: 2,102
|
||
| 21.12.2015, 18:18 | ||
|
1
|
||
|
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
|
|
| 21.12.2015, 18:21 | |
|
ну ок.. хотя код все равно жуткий.
2
|
|
|
Супер-модератор
|
||
| 21.12.2015, 18:24 | ||
|
С,C++,Java,Vb,Haskell: x=y+1 и x=(y+1) - это одно и то же. Лисп (x y z) и ((x y z)) - совсем не одно и то же. Так что мой избыток скобок объясняется не лисповским происхождением, а моей нетвердой уверенностью в приоритетах операций и их лево- правой ассоциативности. Добавлено через 36 секунд Tklwegsd, совершенно верно!
0
|
||
|
650 / 260 / 16
Регистрация: 02.03.2014
Сообщений: 587
|
|
| 21.12.2015, 18:31 | |
|
pycture, а что именно в нём жуткого? Для меня это важно.
Добавлено через 5 минут Лично меня в нём коробит, только использование строки в качестве промежуточного хранилища данных.
0
|
|
|
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
|
|
| 21.12.2015, 18:32 | |
|
Araneo, он не читаемый, т.е. глядя на него общим взглядом не видно алгоритма - его надо расшифровывать. а в декларативных языках читаемый код должен быть "by default".
3
|
|
|
Модератор
|
||||
| 21.12.2015, 18:39 | ||||
|
Не по теме:
С,C++,Java,Vb,Haskell: x=y+1 и x=(y+1) - это одно и то же. Рабочий код. Лисп: x=y+1 и x=(y+1) - это одно и то же (синтаксическая ошибка). :D Как Вы улучшите свой калькулятор, что бы он и в степень возводил?
0
|
||||
|
650 / 260 / 16
Регистрация: 02.03.2014
Сообщений: 587
|
|
| 21.12.2015, 18:43 | |
|
pycture, понял. Наверно я не буду его переписывать. Хоть и знаю что нужно сделать для повышения читаемости. Но как же лениво
![]() Добавлено через 41 секунду KolodeznyDiver, очень просто же! Сейчас будет. Добавлено через 39 секунд А не, не просто, нужно подумать. Добавлено через 2 минуты Вообще, тут рефакторингом запахло.
0
|
|
| 21.12.2015, 18:59 | |
|
Не по теме: Catstail, прошу прощение за оскорбление чувств верующих в Лисп. Но Вы сами его первые вставили. Знаете, ведь, как меня от него корёжит. Впредь, постараюсь игнорировать.
0
|
|
|
Супер-модератор
|
|||||||
| 21.12.2015, 19:00 | |||||||
|
Вот так:
KolodeznyDiver, я не зафиксировал ничего обидного...
0
|
|||||||
|
Супер-модератор
|
|||||||||||||
| 21.12.2015, 19:16 | |||||||||||||
А лаконичность, хоть и хорошее качество, но прозрачность важнее. Есть классическая задача: Дана переменная i. Если ее значение=1, присвоить два, а если значение = 2, то присвоить 1. Самое короткое решение:
Добавлено через 4 минуты
0
|
|||||||||||||
| 21.12.2015, 19:16 | |
|
Помогаю со студенческими работами здесь
60
Применение null-совместимых типов, проверка корня Чтение и запись типов, массив типов и List<> данных в файл Создать массивы разных типов(3 типов), вывести их на экран Не требуется приведение типов при умножении типов Byte Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
[golang] Угол между стрелками часов
alhaos 12.05.2026
По заданным значениям часа и минуты необходимо определить значение меньшего угла между стрелками аналогового циферблата часов.
import "math"
func angleClock(hour int, minutes int) float64 {
. . .
|
Debian 13: Установка Lazarus QT5
ВитГо 09.05.2026
Эта инструкция моя компиляция инструкций volvo
https:/ / www. cyberforum. ru/ blogs/ 203668/ 10753. html
и его же старой инструкции по установке Lazarus с gtk2. . .
|
Нейросеть на алгоритме "эстафета хвоста" как перспектива.
Hrethgir 06.05.2026
На десерт, когда запущу сервер.
Статья тут https:/ / habr. com/ ru/ articles/ 1030914/ . Автор я сам, нейросеть только помогает в вопросах которые мне не известны - не знаю людей которые знали-бы. . .
|
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта
Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
|
|
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром.
возможно получится прикрутить интерпретатор питон для кастомизации игровой логики.
что есть на текущий момент:. . .
|
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2.
Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
|
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
|
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2.
Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
|