"foop": соглашение об именах? Это вспомогательная рекурсивная функция для "foo"; что означает суффикс "p"? - PullRequest
3 голосов
/ 12 марта 2011

Я наткнулся на следующий фрагмент кода (определение функции):

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-библиотеке Карри не определяется напрямую, а скорее с помощью вспомогательной функции с двумя аргументами? .)

Ответы [ 4 ]

2 голосов
/ 12 марта 2011

В этом случае, я считаю, p означает «простое число».Вместо вызова помощника choose' или chooseprime они используют choosep.

2 голосов
/ 12 марта 2011

Я думаю, что это означает 'prime' - в OCaml, который допускает ' в идентификаторах, вспомогательные функции часто называют foo'.На высоком уровне, я думаю, это (и использование «где» для определения вспомогательного помощника) проистекает из желания позволить функциональным программам напоминать свои эквивалентные определения в чистой математике.

1 голос
/ 12 марта 2011

В этом контексте, как уже отмечали другие, это, вероятно, неприменимо, но существует популярное соглашение на Лиспе об использовании окончательного «p» для обозначения предиката. См. жаргон p-соглашение .

Лично я предпочитаю соглашение Ruby об окончании предиката знаком «?».

0 голосов
/ 12 марта 2011

P означает «предикат». Вещи, которые возвращают «истину» или «ложь».

...