мну довольно <(-__-)l
217 / 206 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
1

Есть ли подобный ЯП?

28.02.2013, 01:35. Показов 1029. Ответов 2
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Вот абстрактный код, существует ли язык в котором возможны такие кострукции???
Код
Point{
    float lat long
}
Place{
    Point point
}
Track{
    Place[] places
}
Journey{
    Track[] tracks
}
Первое требование, что бы Place.lat автоматически определялся как Place.point.lat
Подобное поведение в языке Go от google.
но я не знаю, как там разрешается конфликт если у 2х сущностей есть параметр lat, но не суть важно. Да и не важный пункт совсем. В крайнем случае можно написать метод
Код
getLat(){return point.lat;}
Важнее другое, что бы индексатор коллекций по умолчанию мог принимать некий предикат...
Термин из C#, может еще где встречается. Приведу пример кода
Как работает в C#
C#
1
journey.tracks.FindAll(track => track.places.length > 2)
Вернет все треки путешествия journey, которые содержат в себе более 2 мест...
Как я хочу что бы работало (несколько вариантов)
Код
journey.tracks[track => track.places.length > 2]
Такое можно сделать в C#. Расширения (не уверен в этом) или же создание своего класса колекции.
Код
journey.tracks[track => track.places > 2]
Убрал обращение к параметру length, а что еще в колекции будет сравниваться с числом, спорный момент...
Вроде такое тоже можно сделать в C# через перегрузку операторов...
Код
journey.tracks[this.places > 2]
Вроде все понятно, спорный вопрос. все таки yhis уже существует в данном контексте (в C# если метод не статический). тогда можно заменить например на
Код
journey.tracks[it.places > 2]
journey.tracks[$.places > 2]
journey.tracks[$places > 2]
В первом случае с it требуется его резервирование, иначе кофликт как и с this.
Очень нравится второй вариант, третий не такой наглядный.
Все три варианта не реализуемы в C#.


Впредь буду писать
Код
anyList[filter]
где:
- anyList - некая коллекция;
- filter - предикат, который обсуждался выше.


Ну и следующий пункт. Я, вроде, где-то натыкался на такую возможность.
Код
journey.tracks[track => tarck.places.length > 2].places[place => EuclideanDistance(place.point[lat, long], [55, 50]) < 1]
Единицы измерения не имеют особого значения...
Точнее тут сразу 2 пункта
Первый
Код
journey.tracks[filter].places
Получить все места всех маршрутов, удовлетворяющих условию filter, для данного путешествия journey.
Для наглядности journey.tracks.places будет соответствовать коллекции places
Код
Place[] places = [];
for(var track in journey.tracks){
    places.push(track.places);
}
Второй
Ну [55,50] это одномерный массив, например как int[]{55, 50}.
Встречается в том же js. Но мне куда больше нравится синтаксис MatLab
Matlab M
1
[1 2, 3;3, 4]
является матрицей
Код
 1    2    3
 3    4
Если бы язык поддерживал те же возможности работы с матрицами, было бы очень хорошо. Но наврядли такое возможно.
Код
place.point[lat, long]
Здесь создается массив из значений lat и long. Так же можно записать как
Код
place[lat, long]
[place.point.lat, place.point.long]
[place.lat, place.long]
Эти последние два пункта мне кажутся более важными...
В С# можно создавать массивы такими способами
Код
string[] strings = new string[]{"foo", "bar"};
string[] strings = {"foo", "bar"};
Последний способ похож на [1, 2, 3]. Но, вроде, позволяет создавать только одномерные массивы. Но и этого достаточно по идее...
place.point[lat, long] тоже можно реализовать в С#, например передавая в идексатор строки
Код
List<Object> this[params string[] fields]{
    foreach(var field in fields){
        yield return this[field];
    }
}
В дополнению к этому индексатору потребуется еще один, для возврата члена класса по его имени
Код
Object this[string field]{
    return ...;
}
Но это не так сложно я думаю...


Заключение
В общем наиболее близким по ребованиям языком оказывается C#...

Я ненавижу getter`ы и setter`ы.... Так что язык должен обходиться без них...
Properties (Свойства) в C# наиболее мне приятны, но готов жить и без них...

К основным требованиям отношу
journey.tracks.places - иерархичный доступ к полям элементов в массиве...
[1 2, 3;3, 4] - краткое определение массивов так, но лучше place.point[lat, long].
journey.tracks[track => tarck.places.length > 2] - фильтры в индексаторах.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.02.2013, 01:35
Ответы с готовыми решениями:

Есть ли макрос, подобный AutoExec, реагирующий на выход из Access?
Здравствуйте! Подскажите, пожалуйста, есть ли макрос, подобный AutoExec, реагирующий на выход из...

Есть задание написать класс подобный string. Нуждаюсь в уточнениях
Получается под символы в классе выделить обычный динамический массив из char не получится? Надо...

Хочу создать обучаймую программу(сайт). Есть подобный код на паскаль
Всем привет! Хочу создать сайт, который можно обучить, наподобие сайта akinator. И чтобы можно было...

Подобный сайт
Здравствуйте! Как можно создать примерно такой сайт http://dolg-info.jurikon....

2
~ Эврика! ~
1256 / 1005 / 74
Регистрация: 24.07.2012
Сообщений: 2,002
28.02.2013, 10:58 2
Я просто оставлю это здесь.
You appear to believe that:
[x] Syntax is what makes programming difficult
1
мну довольно <(-__-)l
217 / 206 / 15
Регистрация: 17.01.2010
Сообщений: 2,462
28.02.2013, 15:24  [ТС] 3
Цитата Сообщение от gGrn-7DA Посмотреть сообщение
journey.tracks[track => tarck.places.length > 2] - фильтры в индексаторах.
В C# такого не видел, но как писал выше часто используется
C#
1
2
3
4
journey.tracks.FindAll(track => tarck.places.length > 2);
journey.tracks.First(track => tarck.places.length > 2);
journey.tracks.Last(track => tarck.places.length > 2);
journey.tracks.Single(track => tarck.places.length > 2);
и прочее, по мне так это упрощает код.
Ты не пишешь алгоритм фильтрации, а только правило.
Сама фильтрация происходит внутри и весьма прозрачна - предикат всего лишь указатель на функцию...
Память здесь не утечет, некуда...
Цитата Сообщение от gGrn-7DA Посмотреть сообщение
[1 2, 3;3, 4] - краткое определение массивов так, но лучше place.point[lat, long].
А так лучше???
C#
1
2
3
int[][] mass = new int[2][];
mass[0] = new int[] {1, 2, 3};
mass[1] = new int[] {3, 4};
первый вариант вроде проще... Да наверно не стоит пропускать запятые, как позволяент матлаб, но все же...

Цитата Сообщение от gGrn-7DA Посмотреть сообщение
journey.tracks.places - иерархичный доступ к полям элементов в массиве...
Да, достаточно спорно, к тому же могут возникнуть коллизии.
Но я ж не спецификацию пишу, и не собираюсь писать новый язык. Всего лишь изучить...


Хотя с некоторой натяжкой мне подходит C#, последний пункт не знаю как реализовать пока...
0
28.02.2013, 15:24
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.02.2013, 15:24
Помогаю со студенческими работами здесь

Ищу подобный элемент в C#
Есть программа на Делфи, имеется элемент Memo1 где можно перемещаться по вопросам лишь нажимая на...

Контролл, подобный проводнику
Подскажите, пожалуйста, какой контрол и как использовать, чтобы получилось следующее отображение...

SPI-подобный интерфейс
Цель: организовать последовательный интерфейс обмена данными. Входные сигналы: CLK (тактовая),...

Найти подобный Слайдер
http://flash-newsite.ru/internet-magazin-bitriks.html Нужно своровать, или найти подобный слайдер...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

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