#haskell
#haskell
Вопрос:
Есть ли способ преобразовать символы ‘ ‘, ‘-‘, ‘*’, ‘/’ к соответствующим функциям? Я имею в виду такую функцию (очевидно, я пробовал, и это не сработало):
toOperator :: Num a => String -> a -> a -> a
toOperator c = read c :: Num a => a -> a -> a
Комментарии:
1. В общем, нет. В Haskell нет
eval
функции, и фактически эта информация даже не существует во время выполнения. Однако вы можете создать таблицу поиска для определенного набора функций, поскольку функции являются значениями первого класса.
Ответ №1:
Вы можете легко определить частичную функцию для этой цели с помощью сопоставления с образцом
Prelude> :set m
Prelude> let f ' ' = ( )
Prelude| f '-' = (-)
Prelude| f '*' = (*)
Prelude| f '/' = (/)
Prelude|
Prelude> f '*' 3 4
12.0
Prelude> f ' ' 1 2
3.0
Prelude>
и выведенный тип
Prelude> :t f
f :: Fractional a => Char -> a -> a -> a