Значение 'в имени функции на Haskell? - PullRequest
10 голосов
/ 30 июля 2009

Для чего используется цитата '? Я прочитал о функциях карри и прочитал два способа определения функции добавления - карри и неиспользованные. Карри версия ...

myadd' :: Int -> Int -> Int
myadd' x y = x + y

... но без цитаты работает одинаково хорошо. Так в чем же смысл '?

Ответы [ 5 ]

22 голосов
/ 30 июля 2009

Цитата ничего не значит для Хаскелла. Это просто часть названия этой функции.

Люди склонны использовать это для «внутренних» функций. Если у вас есть функция, которая суммирует список, используя аргумент-накопитель, ваша функция суммы примет два аргумента. Это ужасно, поэтому вы делаете sum' функцию из двух аргументов и sum функцию из одного аргумента, например sum list = sum' 0 list.

Отредактируйте, возможно, я должен просто показать код:

sum' s [] = s
sum' s (x:xs) = sum' (s + x) xs

sum xs = sum' 0 xs

Вы делаете это так, чтобы sum' был хвостово-рекурсивным, и чтобы "публичный API" выглядел хорошо.

16 голосов
/ 30 июля 2009

Это часто произносится как «простой», так что это будет «myadd prime». Обычно используется для обозначения следующего шага в вычислении или альтернативы.

Итак, вы можете сказать

add = blah
add' = different blah

Или

f x = 
  let x' = subcomputation x
  in blah.

Это просто привычка, например, использование int i в качестве индекса цикла for для Java, C и т. Д.

Редактировать: надеюсь, этот ответ станет еще более полезным, поскольку я добавил все слова и форматирование кода. :) Я постоянно забываю, что это не система WYSIWYG!

9 голосов
/ 30 июля 2009

Нет особой точки для символа ' в этом случае; это просто часть идентификатора. Другими словами, myadd и myadd' являются различными, несвязанными функциями.

Обычно, однако, ' используется для обозначения некоторого логического отношения оценки. Таким образом, гипотетические функции myadd и myadd' будут связаны так, что myadd' может быть получено из myadd Это соглашение, основанное на формальной логике и доказательствах в академических кругах (где у Haskell есть свои корни). Я должен подчеркнуть, что это только соглашение, Haskell не соблюдает его.

6 голосов
/ 30 июля 2009

цитата '- это еще один допустимый символ в именах Haskell. Он часто используется для определения вариантов функций, в этом случае кавычка произносится как «простое». В частности, библиотеки Haskell используют кавычки, чтобы показать строгость этого варианта. Например: foldl ленив, foldl' строг.

В данном случае похоже, что цитата используется только для разделения карри и вариантов без карри.

1 голос
/ 01 сентября 2009

Как говорили другие, ' не имеет никакого значения для самого Хаскелла. Это просто символ, например буква или цифра.

' используется для обозначения альтернативных версий функции (в случае foldl и foldl') или вспомогательных функций. Иногда вы даже увидите несколько ' в имени функции. Добавление ' в конец имени функции является гораздо более кратким, чем запись someFunctionHelper и someFunctionStrict.

.

Источник этой нотации - математика и физика, где, если у вас есть функция f(x), ее производная часто обозначается как f'(x).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...