문자열을 키로 포함하고 일부 람다 함수를 항목으로 포함하는 하스켈 맵이 있습니다. 예 :람다 함수와 연산자를 연결하는 맵
-- List of supported Operators -> mapping with functions
ops = Map.fromList [("+", \x y -> x + y),
("-", \x y -> y - x),
("*", \x y -> x * y),
("/", \x y -> y/x)]
는 I 입력으로 취하는 함수를 작성하고자 :
- 오퍼레이터를 나타내는 캐릭터 [ "+", "-", "*", "/"] 연산자와 작전지도를 바탕으로
- 두 숫자
는 기능/등 합계/뺄셈을 평가합니다. 두 숫자 중.
내가 좋아하는 뭔가를 시도했다 :
(Map.lookup "+" a) 1 2
을하지만 그것은 작동하지 않습니다.
오류 :
Top level:
No instance for (Show (Integer -> Integer))
arising from use of `print' at Top level
Probable fix: add an instance declaration for (Show (Integer
In a 'do' expression: print it
<interactive>:1:1:
No instance for (Monad ((->) t))
arising from use of `Data.Map.lookup' at <interactive>:1:1-
Probable fix: add an instance declaration for (Monad ((->) t)
In the definition of `it': it = (Data.Map.lookup "+" a) 1 2
... 나를 위해 매우 도움이되지 않습니다.
제안 사항? 고맙습니다 !
'[("+", (+)), ("-",]'(괄호 안의 연산자는 섹션이라고 불리우며 람다와 똑같은 일을합니다.) 함수의 중온 응용 프로그램에 대해서도 작동하고 인수가 고정되어있을 때 (예 :'(\'mod \'2)'또는' (2 /)'). – delnan
@delnan 그는'-'와'/'에 대한 논쟁을 통해 "틀린"방법으로 라운드를 할 수 있습니다. – dave4420
@Dave : 예, 어리석은 나를. 여전히 명시적인 람다에 대한 필요는 없습니다 : flip (-)과 flip (/) : – delnan