Являются ли «процедура» и «функция» синонимичными в Racket? - PullRequest
0 голосов
/ 13 января 2019

Являются ли «процедура» и «функция» синонимичными в Racket (диалект схемы)? Кажется, это подразумевается документацией . Например, документация для compose описывает ее как процедуру , которая

[r] повторяет процедуру , которая составляет данные функции ... Функция compose позволяет данным функциям потреблять и производить любое количество значения ...

(все вышеперечисленное было выделено мной.)

Я понимаю, что procedure? - это библиотечная процедура, а function? - нет. У меня вопрос: правильно ли использовать термины взаимозаменяемо при обсуждении программ (например, при обучении в классе или при написании документации).

Ответы [ 2 ]

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

TL; Dr Это просто жаргон и означает то же самое. Функция, процедура и статический метод одинаковы в программировании.

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

Стандарт Схемы использует только термин процедура . Вы не найдете никаких подсказок о функции вообще. Исторически Racket является стандартной реализацией Scheme, созданной для образовательных целей, и по большей части все еще совместима со Scheme по большей части сегодня, но они разделились и не считают, что следуют стандарту Scheme. Как разрабатывать программы и много документации использует термин функция, и в этой документации он подразумевается как синоним процедуры.

Common Lisp использует термин «функция» последовательно и его предшественники, что предшествует Схеме.

Я думаю, что я даже перевел SO-ответ между языками и изменил код, а также просто переключил функции и процедуры для соответствия языковым языкам непосредственно. Мне бы очень хотелось, чтобы Ракет однажды вымылась и осталась с одним именем, чтобы управлять ими всеми.

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

Краткая версия: да.

Более длинная версия: многие люди проделали хорошую работу по выравниванию словарного запаса для использования в обучении. Это первая статья, которая приходит на ум, хотя она не касается конкретно выбора процедуры / функции:

https://cs.brown.edu/~sk/Publications/Papers/Published/mfk-measur-effect-error-msg-novice-sigcse/paper.pdf

С педагогической точки зрения, конечно, бесполезно иметь два имени для одной и той же вещи, вздох.

Наконец, вы получите более авторитетный ответ (и, честно говоря, я хотел бы знать, как обстоят дела здесь), если вы зададите этот вопрос в Racket Mailing List .

[РЕДАКТИРОВАТЬ] Ох, дальше, я бы даже не сказал, что слово procedure с большей вероятностью будет обозначать что-то определенное в библиотеке.

...