在常规的球拍中,((curry * 2) 3)
按预期工作,结果为6
。
然而,在Typed Racket:
> ((curry * 2) 3)
; readline-input:3:0: Type Checker: could not apply function;
; wrong number of arguments provided
; expected: 0
; given: 1
; in: ((curry * 2) 3)
; [,bt for context]
为什么?
答案 0 :(得分:4)
我认为它与*只能使用一个参数这一事实有关,所以当你用一个参数来讨论它时,它会返回一个不带额外参数的过程。在typed / racket的命令行键入(curry * 2)
,并观察结果:(-> Number)
。
请注意,只有返回类型且没有参数。我不会在打字球拍中看到这种方法,但我希望至少可以解释为什么会这样。只要他们没有选择只使用一个参数,您就可以安全地使用更复杂的程序进行currying。