LINUX.ORG.RU

Язык для работы с массивами

 


1

2

Какой язык самый лучший для работы с массивами? Лучший - не с самой производительной реализацией, а в котором лаконичней всего описываются различные операции с массивам: трансформации, итераторы, разнообразные произведения между массивами.

★★★★★

Последнее исправление: ados (всего исправлений: 1)

Любой.

anonymous
()

Лучший - не с самой производительной реализацией, а в котором лаконичней всего описываются различные операции с массивам: трансформации, итераторы, разнообразные произведения между массивами.

APL, бгг. Ты же это хотел услышать? Или J.

tailgunner ★★★★★
()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от mersinvald

Сначала надо изучить достижения общества в этом направлении чтобы создавать что-то своё. Для этого я и создал этот тред.

ados ★★★★★
() автор топика
Ответ на: комментарий от ados

Тогда вопрос надо было задавать как-то по-другому, а не «самый лаконичный».

tailgunner ★★★★★
()

самый лучший язык для работы с массивами, в плане гибкости, выразительности и тп — это ООП язык, в котором массив есть объект, от которого можно наследовать, расширять и модифицировать как угодно. Работая с массивом как с объектом, можно слепить такой массив, который только пожелаешь, с любым поведением, без каких бы то ни было ограничений.

questvimnode
()

Python. Можно Luajit, если нужна скорость.

anonymous
()
Ответ на: комментарий от tailgunner

Его просто очередной раз забанили.

ados ★★★★★
() автор топика
Ответ на: комментарий от hateyoufeel

интересная идея. Это что-то типа того, что не ты пишешь программу, а программа пишет тебя.

questvimnode
()

Ну как тут уже сказали, ничего более выразительного, чем APL, человечество пока не придумало.

Если говорить про современные реализации, то J всё-таки сложноват, поэтому рекомендую смотреть на K:

http://kparc.com/ http://kparc.com/k.txt

https://github.com/JohnEarnest/ok https://github.com/JohnEarnest/ok/blob/gh-pages/docs/Manual.md

anonymous
()
Ответ на: комментарий от anonymous

ничего более выразительного, чем APL

APL не выразителен, он просто засахарен. Выразительно, это когда ты сам конфигурируешь массив как вздумается, навешиваешь на него любой интерфейс, с любыми операциями, позволяешь ему взаимодействовать с объектами любого типа.

questvimnode
()
Ответ на: комментарий от ados

Есть еще его продвинутая версия - Q!.
Он вроде был в одно время и самый быстрый по работе с массивами.

Int0l ★★
()
Последнее исправление: Int0l (всего исправлений: 5)
Ответ на: комментарий от questvimnode

Интересно, какой интерфейс и с какими операциями, по-твоему, должен быть у массива, и в чём именно он отличается от алгебры в K?

Ну и про «любой тип» «объектов», с которыми без твоего ООП нельзя никак «взаимодействовать», тоже хотелось бы узнать подробнее.

anonymous
()
Ответ на: комментарий от anonymous

простенький пример


MyList := List clone do(
  add := method(arg,
    if(arg isKindOf(Number), self mapInPlace(x, x + arg); return  )
    if(arg isKindOf(List), self mapInPlace(key, value, value +( arg at(key) )); return  )
    if(arg isKindOf(Sequence), self push(arg)  )
  )
)


l := MyList clone


l push(1)
l push(1)
l push(1)


l add(1)
l println

l add(list(1, 2, 3))
l println

l add("foo")
l println


#>>>> list(2, 2, 2)
#>>>> list(3, 4, 5)
#>>>> list(3, 4, 5, foo)

questvimnode
()

Матлаб. Запись массивов без запятой: [1 0 0]. Оператор транспонирования матрицы в один символ: '

Deleted
()
Ответ на: комментарий от questvimnode

Выразительно, это когда ты сам конфигурируешь массив как вздумается, навешиваешь на него любой интерфейс, с любыми операциями, позволяешь ему взаимодействовать с объектами любого типа.

Ну тогда это Smalltalk, разумеется!

  Iterable
    Collection
      Bag
      HashedCollection
        Dictionary
          BindingDictionary
            AbstractNamespace
              Namespace
              RootNamespace
                SystemDictionary
          LookupTable
            IdentityDictionary
            MethodDictionary
            WeakValueLookupTable
              WeakValueIdentityDictionary
          WeakKeyDictionary
            WeakKeyIdentityDictionary
        Set
          IdentitySet
          WeakSet
            WeakIdentitySet
      MappedCollection
      SequenceableCollection
        ArrayedCollection
          Array
            WeakArray
          ByteArray
          CharacterArray
            String
              Symbol
            UnicodeString
          CompiledCode
            CompiledBlock
            CompiledMethod
          Interval
          LargeArrayedCollection
            LargeArray
            LargeByteArray
            LargeWordArray
          WordArray
        LinkedList
          Semaphore
        OrderedCollection
          RunArray
          SortedCollection
    Stream
      FileDescriptor
        FileStream
      Generator
      ObjectDumper
      PositionableStream
        ReadStream
        WriteStream
          ReadWriteStream
      Random
      TextCollector
yoghurt ★★★★★
()
Последнее исправление: yoghurt (всего исправлений: 1)

Фортран. Все прочие от лукавого.

MKuznetsov ★★★★★
()

Какой язык самый лучший для работы с массивами?

Времена, когда на каждый чих придумывали специальный язык давно прошли.

no-such-file ★★★★★
()
Ответ на: комментарий от good_riddance

К.О. утверждает, что это не массивы.

Просили не отвлекаться на implementation details.

Miguel ★★★★★
()
Ответ на: комментарий от questvimnode

Не смог найти в этом комментарии ничего кроме воды

Aswed ★★★★★
()

А что именно тебя интересует? Всякие map, reduce, filter, iter, sort и лямбды есть сейчас во всех мейнстримных языках.

Aswed ★★★★★
()
Ответ на: комментарий от AIv

не с самой производительной реализацией, а в котором лаконичней всего описываются различные операции с массивам

я видел эту производительность в сравнении с плюсами.
красота лаконичность требует жертв!

zaban
()
Ответ на: комментарий от good_riddance

Не работает без обмаза расширениями. ОП просил красивую реализацию.

Не-не-не - всё нормально. Расширенный язык это тоже ведь язык.

ados ★★★★★
() автор топика
Ответ на: комментарий от buddhist

это муттабельная таблица, в которой в качестве ключей выступают упорядоченные числа. А всякие array theory можешь смнло в жопу засунуть. Никого не интересует, кто и как что-то называет, вне контекста программирования.

questvimnode
()
Ответ на: комментарий от questvimnode

Ну и зачем это писать руками, и так ведь уже есть.

 ::l:1 1 1
1 1 1

if(arg isKindOf(Number), self mapInPlace(x, x + arg); return )

Ок.

 
 ::l+:1
2 2 2

if(arg isKindOf(List), self mapInPlace(key, value, value +( arg at(key) )); return )

Ок!

 ::l+:1 2 3
3 4 5

if(arg isKindOf(Sequence), self push(arg) )

Ой! А может, лучше всё-таки не перегружать арифметическую операцию сложения таким странным образом? Как же мне теперь прибавить к моему списку вектор, скажем? Лучше как-нибудь по-другому обозначить конкатенацию, мне кажется:

 ::l,:`foo
(3;4;5;`foo)

Смысл нормальных языков в том, что в них уже есть самая лучшая и продуманная ортогональная алгебра операций, и ничего не надо «перегружать» — станет только хуже (как в твоём примере, где ты перепутал сложение с конкатенацией).

anonymous
()

Про Матрикс Лаборатори выше уже писали, и про Октаву, бесплатного пророка ее.

Ivana
()

Practical Extraction and Report Language

anonymous
()
Ответ на: комментарий от good_riddance

асимптотики — это не implementation detail.

Вполне себе, ибо скорость работы явным образом проигнорирована топикстартером.

Miguel ★★★★★
()
Ответ на: комментарий от anonymous

твой пример не соответствует совершенно. Ты не показал ни полиморфизма, ни гибкости в плане конфигурирования, не наследования/специализации. Это просто обычное днище, как в любом недоязычке, только с говносахаром, ухудшающем читабельность, не более того

questvimnode
()
Ответ на: комментарий от anonymous

И да, там в изначальном примере муттабельность еще есть, кстати, у тебя ее тоже нет

questvimnode
()
Ответ на: комментарий от questvimnode

полиморфизма
гибкости в плане конфигурирования
наследования/специализации

так я ж тебя попросил показать пример, где это нужно в контексте работы с массивами — ты нарисовал какое-то кривое подмножество обычной алгебры массивов плюс одну бессмысленную операцию. давай ты мне покажешь, где все поквоченные умные слова реально помогают?

муттабельность еще есть

я не знаю, что такое «муттабельность», но если допустить, что ты имеешь в виду изменяемость значений (mutability), то конечно в моём примера она есть — значение l меняется после каждой операции (иначе, например, результатом последней было бы (1;1;1;`foo))

anonymous
()
Ответ на: комментарий от anonymous

Это просто был пример того, как я пилю то что хочу, тогда как обычный хомячек, обмазывается тем говном, которое ему соизволил предоставить дядя. Дело не в алгебрах сраных, пример простой, он показывает не «что», а «как». Насчет муттабельности ошибся, сорри.

questvimnode
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.