2017-02-04 12 views
-2
mul (add 2 3) 5 

Может ли точка (.) и доллар ($) заменить операторы только на скобки? Функции mul и add являются наполнителем, то есть порядок приложения должен оставаться неизменным. Это упражнение, чтобы лучше понять вышеупомянутых операторов.Может ли это выражение быть записано без скобок или обратных тиков?

+0

Полностью заменить скобки, или разрешено вводить новые? –

+0

Полностью заменить, да. – Ware

+1

Использование предложения where работает и хорошо масштабируется для более сложных примеров. 'mul s 5 где s = add 2 3' – Ware

ответ

0

Вы можете использовать алгебраические свойства мул:

mul 5 $ add 2 3 
+0

Если и только если фактическая используемая функция имеет это свойство, см.« функции mul и add filler ». – Zeta

+0

Конечно, эта линия должна была интерпретироваться как предварительное условие. –

1

Вы можете использовать комбинатор flip, чтобы позволить вам изменить порядок аргументов. каждая следующая строка эквивалентна:

mul (add 2 3) 5 
(flip mul) 5 (add 2 3) 
flip mul 5 $ add 2 3 

flip определяется как просто:

flip :: (a -> b -> c) -> (b -> a -> c) 
flip f b a = f a b 

Однако, я не считаю, что два оператора . и одна $ достаточно

+1

Я думаю, что это настолько близко, насколько мы можем получить, если требования OP взяты буквально. – duplode