"foop": соглашение об именах? Это вспомогательная рекурсивная функция для "foo"; что означает суффикс "p"?
Я наткнулся на следующий фрагмент кода (определение функции):
choose (x:xs) = choosep x xs
where choosep x [] = x
choosep x (_:_) = x
choosep _ (x:xs) = choosep x xs
на языке программирования Curry в "стандартной библиотеке" -/usr/lib/curry-0.9.11/Success.curry от Muenster Curry Compiler. Вот:
choose :: [a] -> a
а также
choosep :: a -> [a] -> a -- BTW, not a _p_redicate
Является ли суффикс "p" для рекурсивной функции помощника? choosep
известное соглашение об именах? Возможно, это происходит из традиции функционального программирования (Haskell) или логического программирования (Prolog?). Что это значит?
(Эта функция была рассмотрена в разделе Почему недетерминированная функция выбора в std lib Карри определяется не напрямую, а с помощью вспомогательной функции с двумя аргументами?)
4 ответа
В этом случае я считаю p
обозначает "премьер". Вместо вызова помощника choose'
или же chooseprime
, они используют choosep
,
Я думаю, что это означает "премьер" - в OCaml, который позволяет '
в идентификаторах вспомогательные функции часто называют foo'
, На высоком уровне, я думаю, что это (и использование "где" для определения вспомогательного помощника) проистекает из желания позволить функциональным программам напоминать свои эквивалентные определения в чистой математике.
В этом контексте, как отметили другие, это, вероятно, неприменимо, но существует популярное соглашение на Лиспе об использовании окончательного "p" для обозначения предиката. Смотрите жаргон p-конвенции.
Лично я предпочитаю соглашение Ruby об окончании предиката знаком "?".
P означает "предикат". То, что возвращает "истина" или "ложь".