2014-12-16 3 views
4

Можно ли избавиться от переменной х в этой функции ?:функция Сделать короче в Haskell

numocc x = map (length.filter(==x)) 

Например, если у меня есть эта функция:

numocc x l = map (countt x) l 

я могу избавиться от переменную l и получить это:

numocc x = map (countt x) 

Спасибо за помощь.

ответ

4

Вы можете использовать программу "pointfree", чтобы ответить на вопросы, как этот

> pointfree "numocc x = map (length . filter (==x))" 

numocc = map . (length .) . filter . (==) 

редактировать

здесь в действии

> let numocc x = map (length . filter (==x)) 
> let numocc' = map . (length .) . filter . (==) 

numocc 'a' ["aa", "bb"] --outputs [2, 0] 
numocc' 'a' ["aa", "bb"] --also outputs [2, 0] 

В основном, он подсчитывает число of param1 находятся в каждом элементе в элементе списка param2

numocc 'a' ["aa", "bba"] --outputs [2, 1] 
numocc' 'a' ["aa", "bba"] --also outputs [2, 1] 
+0

На самом деле это хорошая программа, но результаты «pointfree» - numocc = map. (длина.). фильтр. (==) не работает. –

+0

Каков ваш ожидаемый результат? –

+1

@ KoinArab- Я просто сравнил функцию, которую вы дали одной точке, дает несколько значений, и она проверяет меня ... Можете ли вы привести пример, где эти два отличаются? Функция в основном рассчитывает количество param1 в списках списков в param2. – jamshidh

Смежные вопросы