【发布时间】:2018-09-13 21:29:25
【问题描述】:
在构建了一个完整的函数之后,我遇到了很多问题,现在我将它分解成小部分。
我的函数有两个变量,一个是一个列表,另一个是一对。使用 (first var1) 时出现错误。
代码如下:
#lang pl
(define (maxMin list maxiMini)
(if (null? maxiMini)
(first list)
2
)
)
这是错误:
类型检查器:多态函数 `first' 无法应用于 论据:
域:(一个列表)
(Pairof a (Listof b))参数:任意
在:(第一个列表)
在这个 youtube 教程的第 1 分钟和第 10 秒时,教授使用第一个函数的方式与我相同,并且确实在那里工作。
我的猜测是 Racket 不将 myList 识别为列表并将其设置为“任何”这可能吗?
【问题讨论】:
-
虽然您没有为您的问题提供足够的信息和适当的最小示例,但我猜您的代码与 Racket 的
list存在名称冲突。只需将函数定义中的list变量重命名为lst或list$。看看问题是否解决了。 -
@AlQuemist 嘿,我实际上尝试过这个并将其命名为 MyList。关于数据量不足,我把我的整个代码。我还能提供什么帮助?我唯一遗漏的部分是子语言。
-
能否请您添加一个简单的函数用例?我无法弄清楚
maxMini的类型。是list还是pair?如果它是一个pair,那么你为什么要应用null?呢?我们不能在 Racket 中创建一个空的pair;参见例如Guide。 -
嗨,首先,感谢您抽出宝贵时间,@assefamaru 回答了,但您也帮助了我!是的,我没有给出用例的上下文,因为这是一个较大程序的一小部分。另外,我检查了它是否为空,因为我不知道它不可能,所以谢谢你教我这个!
-
也许,对于这样的练习,人们应该简单地使用
#lang racket,而不是 Typed Racket;你为什么使用 Typed Racket?