Racket 用打字机拍马屁

Racket 用打字机拍马屁,racket,currying,typed-racket,Racket,Currying,Typed Racket,在常规球拍中,((curry*2)3)按预期工作,结果是6 然而,在打字球拍中: > ((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] 为什么?我认为这与*只能接受

在常规球拍中,
((curry*2)3)
按预期工作,结果是
6

然而,在打字球拍中:

> ((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]

为什么?

我认为这与*只能接受一个参数这一事实有关,因此,当您使用参数对其进行curry处理时,它返回的过程不接受其他参数。在键入的/racket命令行中键入
(curry*2)
,观察结果:
(>Number)


请注意,只有一个返回类型,没有参数。我看不出有什么办法可以解决这个问题,但我希望这至少能解释为什么会发生这种情况。在更复杂的过程中使用curry应该是安全的,只要它们没有只接受一个参数的选项

(删除是因为这更像是一个答案,所以我将文本复制到了一个答案)事实上,当我用
(:mult:(->Number))
定义mult*)
时,效果很好。这很奇怪;在键入的Racket中,多算术程序不可能使用curry吗?我对键入的Racket了解不够,无法回答您的评论,但我可以为您的解决方法提供一个速记:
((curry(ann*(->Number))2)3
。看见