Если вы пишете функцию, для которой требуется вектор, я бы посоветовал вам забыть о возможности скалярного ввода (считайте его неопределенным поведением) и заставить вызывающий , чтобы разбить аргумент на вектор.Это должно быть , безусловно - дело меньшинства (и если это не так, вы делаете что-то не так).Также как если бы вы написали функцию, принимающую матрицу, вы не ожидаете, что ей будет присвоен вектор.Использование скаляра в месте векторов так же странно, как и использование вектора в месте матриц.
Действительно странно, что 1 2 3
и 1 2
являются векторами, но только 1
является скаляром, поэтомуесли вам нужна согласованность, не создавайте векторы с нотацией A B C
(она же нотация цепей) и забудьте, что массивы можно создавать таким образом полностью.Конечно, я не на самом деле ожидаю, что вы это сделаете, и я хотел бы, чтобы была нотация, которая могла бы создавать векторы любого размера одинаково.
Кроме того, донне забывайте, что APL поддерживает массивы с рангом> 1, использование которых правильно является основной частью написания APL.Скаляры имеют ранг 0 (0-мерный), векторы - 1 (1D), матрицы - 2 (2D) и т. Д.