Какой _did_ операторы C/\и \/делают?

Это должно добиться цели:

(defun sum-list (list)
  (if list
      (+ (car list) (sum-list (cdr list)))
    0))

[источник]

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

34
задан NevilleDNZ 15 December 2016 в 02:23
поделиться

8 ответов

\ / выглядит как sup , а / \ выглядит как inf . Они также могут быть и , соответственно.

Я не помню, чтобы когда-либо видел их во 2-м издании K&R или любой другой книге C.

14
ответ дан 27 November 2019 в 16:52
поделиться

Ни / \, ни / не определены как операторы в стандарте ISO C89, и я не думаю, что они когда-либо были определены в какой-либо более ранней версии. И они определенно не определены в C99, насколько мне известно.

Вот черновик стандарта ANSI C89, для справки: http://flash-gordon.me.uk/ansi.c.txt

(Вы, вероятно, стали жертвой какой-то странной тайной препроцессорной магии)

18
ответ дан 27 November 2019 в 16:52
поделиться

Я не уверен насчет \ / , но / \ - допустимая конструкция. Он используется для размещения двух косых черт однострочного комментария на разных строках. Например:

/\
/ Comment content

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

/\
\
\
\
\
/ Still a legal comment.

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

// Yet another comment \
This line is in the comment \\
And so is this one!
6
ответ дан 27 November 2019 в 16:52
поделиться

Я сомневаюсь, что они когда-либо имели в виду что-нибудь. Если и случалось, то это было давным временем назад. Единственные известные мне основные операторы, которые были удалены из C, были = + и = -, которые были ранними синонимами для + = и - =. Вы можете посмотреть на DMR Primeval C Page для доказательств.

3
ответ дан 27 November 2019 в 16:52
поделиться

В C никогда не было таких операторов.

Обычно / был бы escape-кодом в некоторых строковых системах, не уверен, что / \ когда-либо имел какое-либо значение.

3
ответ дан 27 November 2019 в 16:52
поделиться

Я собираюсь предположить, что это отсылка к формальной символической логике:

http://en.wikipedia.org/wiki/Table_of_logic_symbols

/ используется для обозначения дизъюнкции (ИЛИ) / \ используется (реже) для обозначения конъюнкции (И)

3
ответ дан 27 November 2019 в 16:52
поделиться

Спекуляция!

Если у вас есть пробелы вокруг них, то:

a /\ b   ===>   a / b

a \/ b   ===>   a / b

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

При этом как компилятор SUN C (версия 12), так и компилятор GNU C (версия 4.4) отвергают код, содержащий обратную косую черту. Но я легко мог поверить, что старые препроцессоры C были менее осторожны.

Соответствие стандартам

Операторы никогда не были частью официальной версии C.

Кроме того, стандарт не допускал интерпретации, которую я дал (раздел 5.1.1.2 Фазы перевода, как в C89, так и в C99) - но нестандартные компиляторы, конечно, не ограничиваются стандартом.


Добавлено после публикации источника:

Интересно! Так что это выглядит правдоподобным для ' a = b / \ c; ', чтобы присвоить максимальное значение b и c для a, и' a = b \ / c; ', чтобы сделать минимум (или, как Грег Хьюгилл, скорее наоборот). И в те дни было вероятно, что современные операторы ' + = ' по-прежнему записывались как ' = + ' и фактически были двумя токенами ( нет подтверждающих доказательств для этого утверждения; снова потеря памяти ), поэтому гипотетическое ' a = / \ b; ' (или, в современных обозначениях, ' a / \ = b; ') был бы оператором максимального присваивания и т. д.

Мне также приходит в голову, что речь Томпсона ACM Turing Award « Размышления о доверии » как-то уместна.

a = b \ / c; ', чтобы сделать минимум (или, как указал Грег Хьюгилл, скорее наоборот). И в те дни было вероятно, что современные операторы ' + = ' по-прежнему записывались как ' = + ' и фактически были двумя токенами ( нет подтверждающих доказательств для этого утверждения; снова потеря памяти ), поэтому гипотетическое ' a = / \ b; ' (или, в современных обозначениях, ' a / \ = b; ') был бы оператором максимального присваивания и т. д.

Мне также приходит в голову, что речь Томпсона ACM Turing Award « Размышления о доверии » как-то уместна.

a = b \ / c; ', чтобы сделать минимум (или, как указал Грег Хьюгилл, более вероятно, наоборот). И в те дни было вероятно, что современные операторы ' + = ' по-прежнему записывались как ' = + ' и фактически были двумя токенами ( нет подтверждающих доказательств для этого утверждения; снова потеря памяти ), поэтому гипотетическое ' a = / \ b; ' (или, в современных обозначениях, ' a / \ = b; ') был бы оператором максимального присваивания и т. д.

Мне также приходит в голову, что речь Томпсона ACM Turing Award « Размышления о доверии » как-то уместна.

вполне вероятно, что современные операторы ' + = ' по-прежнему записывались как ' = + ' и фактически были двумя токенами ( нет подтверждающих доказательств для этого утверждения; снова потеря памяти ), поэтому гипотетическое ' a = / \ b; ' (или, в современных обозначениях, ' a / \ = b; ' ) был бы оператором максимального присваивания и т. д.

Мне также приходит в голову, что речь Томпсона на Премии Тьюринга ACM « Размышления о доверии » как-то уместна.

вполне вероятно, что современные операторы ' + = ' по-прежнему записывались как ' = + ' и фактически были двумя токенами ( нет подтверждающих доказательств для этого утверждения; снова потеря памяти ), поэтому гипотетическое ' a = / \ b; ' (или, в современных обозначениях, ' a / \ = b; ' ) был бы оператором максимального присваивания и т. д.

Мне также приходит в голову, что речь Томпсона на Премии Тьюринга ACM « Размышления о доверии » как-то уместна.

в современных обозначениях, « a / \ = b; ') было бы оператором максимального присваивания и т. д.

Мне также приходит в голову, что речь Томпсона о премии Тьюринга ACM« Размышления о Доверие к доверию »как-то уместно.

в современных обозначениях, « a / \ = b; ') было бы оператором максимального присваивания и т.д. Доверие к доверию »как-то уместно.

10
ответ дан 27 November 2019 в 16:52
поделиться

Каретка ( ^ ) выполняет побитовое исключающее ИЛИ.

Я не верю, что существует оператор "V". Это буква «V» (или что-то очень похожее на нее). Кто-нибудь может захотеть дать такое имя переменной.

1
ответ дан 27 November 2019 в 16:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: