Racket 打字/拍子-我如何使这个功能工作,不断得到打字检查错误

Racket 打字/拍子-我如何使这个功能工作,不断得到打字检查错误,racket,Racket,拥有 在TypedRacket中,如何使此函数工作?该函数的工作原理如下: (: f (-> Procedure (Pairof Integer Integer) Boolean)) (define (f comparator pair) (comparator (first pair) (second pair))) 我发现以下错误: (f = '(1 2)) >>>> false. (f > '(4 2)) >>>&g

拥有

在TypedRacket中,如何使此函数工作?该函数的工作原理如下:

(: f (-> Procedure (Pairof Integer Integer) Boolean))
   (define (f comparator pair)
      (comparator (first pair) (second pair)))
我发现以下错误:

(f = '(1 2)) >>>> false.
(f > '(4 2)) >>>> true.

因此,可能是函数定义导致了此错误,但如何修复此错误?

以下是一个适用于您的示例的定义:

Type Checker: Polymorphic function first could not be applied to arguments
Type Checker: Polymorphic function second could not be applied to arguments
Type Checker: cannot apply a function with unknown arity
必须将第一个参数的类型定义为从两个整数到布尔值的函数,将第二个参数的类型定义为列表(因为在函数调用中使用了列表)


这是一个简单的定义,只是开始使用类型。然后,您可以将其更改为将函数应用于更一般类型的值,如数字而不是整数、多态函数等。

以下是一个适用于您的示例的定义:

Type Checker: Polymorphic function first could not be applied to arguments
Type Checker: Polymorphic function second could not be applied to arguments
Type Checker: cannot apply a function with unknown arity
必须将第一个参数的类型定义为从两个整数到布尔值的函数,将第二个参数的类型定义为列表(因为在函数调用中使用了列表)


这是一个简单的定义,只是开始使用类型。然后,您可以将其更改为将函数应用于更一般类型的值,如数字而不是整数、多态函数等。

您不想使用
过程
类型。它并不比
Any
好多少,因为它没有指定有关过程的任何信息,它可能需要1个参数、2个参数,甚至没有参数!因此,键入的Racket不允许您调用它,因为它不知道您是否正确地调用了它。给它一个更具体的类型,在这种情况下,
(>Integer-Integer-Boolean)
,输入的Racket将愉快地继续。另外
(Pairof-Integer)
不引用两个整数的列表。为此,您需要
(列出整数)
。您不想使用
过程
类型。它并不比
Any
好多少,因为它没有指定有关过程的任何信息,它可能需要1个参数、2个参数,甚至没有参数!因此,键入的Racket不允许您调用它,因为它不知道您是否正确地调用了它。给它一个更具体的类型,在这种情况下,
(>Integer-Integer-Boolean)
,输入的Racket将愉快地继续。另外
(Pairof-Integer)
不引用两个整数的列表。因此,你需要
(列出整数)
。哦,对了,哦,当然,我有一个大脑拉格,两人一组思考,但是(第一对)确实是一个数字/整数,而不是一对整数,对吧。。。我的错就在那里,谢谢你!有没有一种方法可以让比较器也被输入?比如我如何检查它是否是a=,无需担心,我刚刚看到(->整数布尔)是比较器的东西,因为它接受两个整数并返回一个布尔值。哦,对了,哦,当然,我有一个大脑滞后,成对思考,但是(第一对)确实是一个数字/整数,而不是一对整数,对吧。。。我的错就在那里,谢谢你!有没有一种方法可以让比较器也被输入?就像我如何检查它的a=,无需担心,我刚刚看到(->整数布尔)是比较器的东西,因为它接受两个整数并返回一个布尔值。