Это должно добиться цели:
(defun sum-list (list)
(if list
(+ (car list) (sum-list (cdr list)))
0))
Редактирование: Вот другая хорошая ссылка , который объясняет car
и cdr
- в основном они - функции, которые позволяют Вам захватывать первый элемент списка и получать новый список без первого объекта.
\ /
выглядит как sup
, а / \
выглядит как inf
. Они также могут быть ∨ и
∧ , соответственно.
Я не помню, чтобы когда-либо видел их во 2-м издании K&R или любой другой книге C.
Ни / \, ни / не определены как операторы в стандарте ISO C89, и я не думаю, что они когда-либо были определены в какой-либо более ранней версии. И они определенно не определены в C99, насколько мне известно.
Вот черновик стандарта ANSI C89, для справки: http://flash-gordon.me.uk/ansi.c.txt
(Вы, вероятно, стали жертвой какой-то странной тайной препроцессорной магии)
Я не уверен насчет \ /
, но / \
- допустимая конструкция. Он используется для размещения двух косых черт однострочного комментария на разных строках. Например:
/\
/ Comment content
Это работает, потому что символ обратной косой черты экранирует новую строку, и синтаксический анализатор продолжает работу, как если бы ее там не было. Это не сработает, если после обратной косой черты стоит пробел или если вторая косая черта имеет отступ. Из-за этого можно экранировать любое количество символов новой строки, как в
/\
\
\
\
\
/ Still a legal comment.
Обратные косые черты также могут использоваться в конце обычных однострочных комментариев, чтобы они продолжались до следующей строки, как в
// Yet another comment \
This line is in the comment \\
And so is this one!
Я сомневаюсь, что они когда-либо имели в виду что-нибудь. Если и случалось, то это было давным временем назад. Единственные известные мне основные операторы, которые были удалены из C, были = + и = -, которые были ранними синонимами для + = и - =. Вы можете посмотреть на DMR Primeval C Page для доказательств.
В C никогда не было таких операторов.
Обычно / был бы escape-кодом в некоторых строковых системах, не уверен, что / \ когда-либо имел какое-либо значение.
Я собираюсь предположить, что это отсылка к формальной символической логике:
http://en.wikipedia.org/wiki/Table_of_logic_symbols
/ используется для обозначения дизъюнкции (ИЛИ) / \ используется (реже) для обозначения конъюнкции (И)
Если у вас есть пробелы вокруг них, то:
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;
') было бы оператором максимального присваивания и т.д. Доверие к доверию »как-то уместно. Каретка ( ^
) выполняет побитовое исключающее ИЛИ.
Я не верю, что существует оператор "V". Это буква «V» (или что-то очень похожее на нее). Кто-нибудь может захотеть дать такое имя переменной.