Подтвердить что ты не робот

Существуют ли другие распространенные "c-like" или не "c-like" языки с ненулевой позицией массива индекса?

Язык программирования C известен как язык массива с нулевым индексом. Первый элемент в массиве доступен с помощью 0. Например, double arr[2] = {1.5,2.5} Первый элемент в массиве arr находится в позиции 0. arr[0] === 1.5 Какие языки программирования являются индексами на основе 1?

Я слышал, что эти языки начинаются с 1 вместо 0 для доступа к массиву: Algol, Matlab, Action !, Pascal, Fortran, Cobol. Это завершено?

В частности, массив на основе 1 будет обращаться к первому элементу с 1, а не с нулем.

4b9b3361

Ответ 1

Список можно найти в Википедии.

ALGOL 68
APL
AWK
CFML
COBOL
Fortran
FoxPro
Julia
Lua
Mathematica
MATLAB
PL/I
Ring
RPG
Sass
Smalltalk
Wolfram Language
XPath/XQuery

Ответ 2

Fortran начинается с 1. Я знаю, что, поскольку мой папа использовал программу Fortran до моего рождения (мне сейчас 33 года), и он действительно критикует современные языки программирования, начиная с 0, заявляя, что это неестественно, а не то, как люди думают, в отличие от математике и т.д.

Однако, я нахожу вещи, начинающиеся с 0 вполне естественными; мой первый реальный язык программирования был C и * (ptr + n) не работал бы так хорошо, если n не начиналось с нуля!

Ответ 3

Достаточно большой список языков находится в Википедии под Сравнение языков программирования (массив) в разделе "Таблица перекрестных ссылок системы массива" ( Столбец базового индекса по умолчанию)

В этом есть хорошее обсуждение 1- и 0-индексированных и подписок вообще

Процитировать в блоге:

EWD831 by E.W. Dijkstra, 1982.

Имея дело с последовательностью длины N, элементы которой мы хотите различить по индексу, следующий досадный вопрос - это то, что индекс значение для назначения на его запуск элемент. Соблюдение конвенции a) дает, начиная с индекса 1, индексный интервал 1 ≤ я < N + 1; начиная с 0, однако, дает более хороший диапазон 0 ≤ я < N. Итак, позволим нам наши ординалы начинаются с нуля: Элементарный ординал (индекс) равен количество предшествующих ему элементов последовательность. И мораль история в том, что мы лучше - после всех этих столетий! - ноль как самый натуральный число.

Примечание: многие языки программирования были разработаны без должного внимание к этой детали. В ФОРТРАНЕ индексы всегда начинаются с 1; в АЛГОЛЕ 60 и в PASCAL, конвенция c) имеет был принят; более поздний SASL отступил на съезде ФОРТРАН: последовательность в SASL является одновременно функция на положительные целые числа. Жалость! (Конец замечания.)

Ответ 4

Fortran, Matlab, Pascal, Algol, Smalltalk и многие другие.

Ответ 5

Вы можете сделать это в Perl

$[ = 1;  # set the base array index to 1

Вы также можете начать с 42, если вам так хочется. Это также влияет на индексы строк.

Фактически использование этой функции крайне не рекомендуется.

Ответ 6

Также в Ada вы можете определить индексы массива по мере необходимости:

A : array(-5..5) of Integer;       -- defines an array with 11 elements
B : array(-1..1, -1..1) of Float;  -- defines a 3x3 matrix

Кто-то может утверждать, что определяемые пользователем диапазоны индексов массивов приведут к проблемам обслуживания. Тем не менее, нормально писать код Ada таким образом, который не зависит от индексов массива. С этой целью язык предоставляет атрибуты элемента, которые автоматически определяются для всех определенных типов:

A'first   -- this has the value -5
A'last    -- this has the value +5
A'range   -- returns the range -5..+5 which can be used e.g. in for loops

Ответ 7

JDBC (не язык, а API)

String x = resultSet.getString(1);  // the first column

Ответ 8

Erlang tuples и lists индекс, начинающийся с 1.

Ответ 9

Lua - неутешительно

Ответ 10

Найдено один - Lua (язык программирования)

Проверьте раздел массивов, в котором говорится -

"Массивы Lua основаны на 1: первый индекс равен 1, а не 0, как и для многих других языков программирования (хотя допускается явный индекс 0)"

Ответ 11

VB Classic, по крайней мере, через

Option Base 1

Ответ 12

Строки в Delphi начинаются с 1.

(Статические массивы должны иметь нижнюю границу, указанную явно. Динамические массивы всегда начинаются с 0.)

Ответ 13

ColdFusion - даже если это Java под капотом

Ответ 14

Ада и Паскаль.

Ответ 15

PL/SQL. Результатом этого является использование языков, начинающихся с 0 и взаимодействующих с Oracle, вам нужно обработать 0-1 конверсии самостоятельно для доступа к массиву по индексу. На практике, если вы используете конструкцию типа foreach по строкам или получаете доступ к столбцам по имени, это не так много, но вам может понадобиться, например, самый левый столбец, который будет столбцом 1.

Ответ 16

Индексы начинаются с одного в CFML.

Ответ 17

Вся лирианская линия языков, включая Pascal, Object Pascal, Modula-2, Modula-3, Oberon, Oberon-2 и Ada (плюс несколько других, которых я, вероятно, забыл) позволяет массивам индексироваться с любой точки, например, включая 1.

Erlang индексирует кортежи и массивы из 1.

Я думаю, что я не уверен, что Algol и PL/1 оба индекса из 1. Я также уверен, что индексы Cobol от 1.

В основном большинство языков программирования высокого уровня до C, индексированных с 1 (с указанием языков ассемблера, являющихся заметным исключением по очевидным причинам, и причины C-индексов от 0) и многих языков из-за гегемонии с преобладанием C, все еще делают это для в этот день.

Ответ 18

Существует также Smalltalk

Ответ 19

Visual FoxPro, FoxPro и Clipper используют массивы, где элемент 1 является первым элементом массива... Я предполагаю, что это то, что вы подразумеваете под индексом 1.

Ответ 20

Я вижу, что знание fortran здесь все еще находится в версии '66.

Fortran имеет переменную как нижнюю, так и верхнюю границы массива.

Значение, если вы объявите массив вроде:

real, dimension (90) :: x

то 1 будет нижней границей (по умолчанию).

Если вы объявите его как

real, dimension(0,89) :: x

то, однако, она будет иметь нижнюю границу 0.

Если, с другой стороны, вы объявляете это как

real, allocatable :: x(:,:)

тогда вы можете выделить его, как хотите. Например

allocate(x(0:np,0:np))

означает, что массив будет иметь элементы

x(0, 0), x(0, 1), x(0, 2 .... np)
x(1, 0), x(1, 1), ...
.
.
.
x(np, 0) ...

Возможны также более интересные комбинации:

real, dimension(:, :, 0:) :: d
real, dimension(9, 0:99, -99:99) :: iii

которые оставлены в качестве домашней работы для заинтересованного читателя:)

Это только те, что я вспомнил с головы. Поскольку одной из основных сильных сторон fortran являются возможности обработки массивов, ясно, что в этом случае не так много других.

Ответ 21

Никто не упомянул XPath.

Ответ 22

Mathematica и Maxima, помимо других языков, уже упомянутых.

Ответ 23

informix, помимо других уже упомянутых языков.

Ответ 24

Базовый - не только VB, но и все предыдущие версии эпохи 1980-х годов.

Ричард

Ответ 25

FoxPro используемые массивы, начиная с индекса 1.

Ответ 27

RPG, включая современные RPGLE

Ответ 28

Хотя C индексируется по индексу 0, можно организовать доступ к массиву в C, как если бы он был проиндексирован 1 (или любое другое значение). Не то, что вы могли бы ожидать от обычного C-кодера, часто, но иногда это помогает.

Пример:

#include <stdio.h>
int main(){
    int zero_based[10];
    int* one_based;
    int i;
    one_based=zero_based-1;

    for (i=1;i<=10;i++) one_based[i]=i;
    for(i=10;i>=1;i--) printf("one_based[%d] = %d\n", i, one_based[i]);
    return 0;
}