Чем полезно различие между скалярами и векторами в APL? - PullRequest
0 голосов
/ 20 января 2019

Я опытный инженер-программист, начинающий изучать APL, и для того, чтобы на ранних этапах лучше понять язык, я хотел бы понять, почему язык предоставляет кодеру разницу между скалярами и векторами. Насколько я могу судить об этом в своих исследованиях, это только ограничивает гибкость, не принося никакой пользы для ее компенсации. В результате код APL перегружен ненужными обходными путями, такими как ravels, Encloses и Discloses.

Поскольку APL - такой причудливый и трудно читаемый язык, я создаю свою собственную вспомогательную библиотеку в APL, чтобы создать свой собственный интерфейс APL-ish, и ухожу от использования вялых "идиом" в необработанном APL для выполнения повседневные задачи. Прежде чем я буду строить абстракцию различий скаляр / вектор во всей моей вспомогательной библиотеке, должен ли я знать о какой-либо утилите, которой я могу пожертвовать, делая это?

Спасибо!

1 Ответ

0 голосов
/ 20 января 2019

Если вы пишете функцию, для которой требуется вектор, я бы посоветовал вам забыть о возможности скалярного ввода (считайте его неопределенным поведением) и заставить вызывающий , чтобы разбить аргумент на вектор.Это должно быть , безусловно - дело меньшинства (и если это не так, вы делаете что-то не так).Также как если бы вы написали функцию, принимающую матрицу, вы не ожидаете, что ей будет присвоен вектор.Использование скаляра в месте векторов так же странно, как и использование вектора в месте матриц.

Действительно странно, что 1 2 3 и 1 2 являются векторами, но только 1 является скаляром, поэтомуесли вам нужна согласованность, не создавайте векторы с нотацией A B C (она же нотация цепей) и забудьте, что массивы можно создавать таким образом полностью.Конечно, я не на самом деле ожидаю, что вы это сделаете, и я хотел бы, чтобы была нотация, которая могла бы создавать векторы любого размера одинаково.

Кроме того, донне забывайте, что APL поддерживает массивы с рангом> 1, использование которых правильно является основной частью написания APL.Скаляры имеют ранг 0 (0-мерный), векторы - 1 (1D), матрицы - 2 (2D) и т. Д.

...