2015-10-27 3 views
3

У меня возникли проблемы написания этого кода, который мой профессор дал мне:Изменение определения функции в точке свободного стиля

Напишите функцию с именем digit7 который принимает Int и возвращает Bool говорят или нет 7 является одной из цифр. (Подсказка: используйте show для превратить количество в список символов.) Используйте digit7 создать функцию без параметров, называемых square7, который возвращает наименьшее число, квадрат которого содержит 7 как цифра.

Код, который у меня есть:

digit7 l = elem '7' (show l) 

Это работает, но мне нужна коды, написанные в стиле точечного бесплатно. У меня также есть проблемы с выяснением функции square7.

ответ

5

Для функции digit7, вы можете преобразовать ваше определение в точку-свободный стиль, используя функциональный состав:

digit7 = (elem '7') . (show) 

Это потому, что:

digit7 l 
-> ((elem '7') . (show)) l  By substitution 
-> (elem '7') ((show) l)  By definition of (.) 
-> elem '7' (show l)   By operator precedence 

Что касается функции square7 , Я рекомендую использовать dropWhile и head.

+3

Конечно, круглые скобки здесь не нужны и, вероятно, будут опущены в идиоматическом Haskell, поэтому определение будет просто «elem» 7. show'. –

+0

Согласен. Я хотел сделать это на 100% понятным для новичков, какие аргументы принимает оператор '.'. – Nayuki

+0

Действительно, но было бы лучше, если бы вы просто объяснили самое основное правило: операторы _infix ᴀʟᴡᴀʏꜱ имеют более низкий приоритет, чем функция application_. – leftaroundabout

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