Это просто предположение, но я дам ему шанс. Оба они используются в очень специфических случаях. Они получают доступ только к первому и второму элементам кортежа, который состоит только из двух элементов. Они не работают для других размеров кортежей. Во многих случаях программист может иметь тип, который имеет два элемента, но вместо того, чтобы использовать кортеж, он будет создавать свой собственный класс, потому что он будет более описательным.
Кроме того, поскольку они оба используются только на 2 элементах, часто бывает так, что вы пишете fst
, когда имеете в виду snd
и наоборот. Оба эти сокращения составляют 3 символа, поэтому, когда вы вернетесь и отредактируете свой источник после того, как осознаете свою ошибку, он не изменит формат вашего кода или не сдвинет любые символы в этой строке. Не так важно, но все равно приятно.
Противоположный объектно-ориентированным языкам много кода в haskell включает в себя объединение функций в одну строку, приятно иметь короткие функции, чтобы все они вписывались в одну строку. Многие программисты используют 79 символов в строке, и, безусловно, есть что-то привлекательное в том, что вам не нужно иметь новую строку в одной из ваших функций, потому что она слишком длинная. Специально, функция, которая использует защитные устройства или сопоставление образцов.
Чтобы показать, насколько кратким haskell может быть и остается хороший стиль.
sum [] = 0
sum (x:xs) = x + sum xs
Оппозитный на C++
template <T>
T sum(list<T> lst)
{
T s = 0;
for(list<T>::iterator it=lst.begin();it!=lst.end();++it)
s += *it;
return s;
}
Но это просто глупый пример.
Я думаю, что это намного красивее, чем некоторый объектно-ориентированный код, который имеет линию с 150 символами.
Почему у POSIX есть функция 'creat' вместо' create'? –
Мне нравится, как [в основном тот же вопрос, примененный к PHP вместо Haskell] (http://stackoverflow.com/questions/150637/why-are-the-built-in-functions-in-php-named-so- случайным образом), имеет 105 upvotes, в то время как этот закрыт только с отрицательными голосами ... – leftaroundabout
@leftaroundabout Yup. Этот вопрос был задан в течение долгого времени, прежде чем СО стал строго спорить, и сегодня его не терпит. VTC. – AndrewC