List cons函数不接受我的输入

List cons函数不接受我的输入,list,input,racket,cons,List,Input,Racket,Cons,好吧,我正试图添加两个元素以成为一个列表,在第4分钟和第53秒,我看到最好的做法是使用“cons” 当我这样做的时候: (cons (Listof Number) (Listof (Listof Number))) 它工作得非常好,但它给了我一个镜子,让我知道我应该得到什么。因此,我尝试: (cons (Listof (Listof Number)) (Listof Number) ) 这导致: 类型检查器:无法将多态函数“cons”应用于 论据: 论据1: 预期:a 给定:(Listof(

好吧,我正试图添加两个元素以成为一个列表,在第4分钟和第53秒,我看到最好的做法是使用“cons”

当我这样做的时候:

(cons (Listof Number) (Listof (Listof Number)))
它工作得非常好,但它给了我一个镜子,让我知道我应该得到什么。因此,我尝试:

(cons (Listof (Listof Number)) (Listof Number) )
这导致:

类型检查器:无法将多态函数“cons”应用于 论据:

论据1:

预期:a

给定:(Listof(Listof Real))

论据2:

预期:(a名单)

给定:(不动产清单)

结果类型:(a的列表)

预期结果:(Listof(Listof Real))

in:(cons acc(从混合列表中获取最小值和最大值(第一个lol)))

这很奇怪,因为报告说:

cons函数实际上接受任何两个值,而不仅仅是一个列表 对于第二个论点

这是我的实际代码:

(:最小和最大列表(->(任何列表的列表))(任何列表的列表的列表(数字的列表)))
(:尾部最小值和最大值列表(->(任何列表的列表))(列表的列表的列表的列表编号))(列表的列表编号)))
(:从混合列表(->(任何列表)(数字列表))中获取最小值和最大值)
(定义(最小和最大列表lol)
(尾部最小值和最大值列出lol’())
(定义(尾部最小和最大列表lol acc)
(如果(空?lol)
行政协调会
(尾部最小值和最大值列表(剩余lol)(cons acc(从混合列表中获取最小值和最大值)(第一个lol(()()))))
(定义(从混合列表mixedList获取最小值和最大值)
(如果为空?(子列表编号混合列表))
'()
(min和maxRec(子列表编号混合列表)(第一个(子列表编号混合列表))(第一个(子列表编号混合列表‘‘‘‘‘)’)
(测试(最小和最大列表’((任何“Benny”10 OP 8)(任何“Benny”OP 2 3)))=>((8 10)()
下面是我的代码使用的各种函数的代码。这些工作正常,因此没有理由检查它们:

#lang pl
(需要机架单元)
(需要拍/跟踪)
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;问题1
(:min&maxRec(->(列表编号)编号(列表编号)))
(:最小值和最大值(->编号(编号列表)))
(define(min&max number1 number2 number3 number4 number5);获取所有数字并发送到min&max递归部分
(最小值和最大值(列表编号2编号3编号4编号5)编号1编号1);使所有数字成为一个列表,并具有最大和最小数字
(定义(最小值和最大值)
;逻辑:1)如果已完成列表,则返回结果2)否则,请检查列表头的最大值或最小值,并使用较短的列表和新的最大值或最小值调用函数
(如果(空?myList)
;查看完所有数字后,从myList返回最小值和最大值
(列出最小值和最大值)
(如果(>(第一个myList)max);头部是否最大?
(最小值和最大值(剩余myList)(第一个myList)最小值)
(如果(<(第一个myList)最小值);头部是否为最小值?
(最小值和最大值(剩余myList)最大值(第一个myList))
(最小值和最大值(剩余myList)最大值最小值(()()))
(测试(最小值和最大值2 3 2 7 1)=>'(1 7))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;问题2 a
(:子列表编号(->(任何列表)(编号列表)))
(:尾部子列表编号(->(任何列表)(编号列表)(编号列表)))
;;此func调用diff func,因为尾部递归需要累加器。
(定义(子列表编号myList)
(尾部子列表编号myList`())
;;这使用尾部递归(所有计算在递归之前不进行,并通过累加器发送)
(定义(尾部子列表编号myList acc)
(如果(空?myList)
acc;如果已完成列表中的所有VAR
(如果(编号)(第一个myList))
(尾部子列表编号(剩余myList)(cons(第一个myList)acc));如果列表头是一个编号,则将其添加到acc,并继续处理列表的其余部分
(尾部子列表编号(剩余myList)acc);否则抛出这个变量并处理列表的其余部分

请注意,当您在
#lang racket
中链接到
cons
时,它与其他语言中的
cons
不同,如
#lang pl
。不同语言中的相同名称和函数可以相同,但通常是不同的。例如,
cons
#中的朋友!R6R
是从
mcons
#lang racket

我不知道什么是
#lang pl
,但它似乎是以某种方式键入的。我假设当你说你这样做的时候:

(cons (Listof Number) (Listof (Listof Number)))
你的意思是你做:

(cons a b)
其中
a
(编号列表)
类型,
b
(编号列表)
。我注意到第二种类型是第一种类型的列表。在你的试验中,这两种类型没有这种关系,相反。您可能已经切换了参数,并且
acc
的正确代码是:

(cons (get-min&max-from-mixed-list (first lol)) acc)
我假设
cons
的类型规范可能要求第二个列表的类型与第一个参数的类型相同。对于Scheme和
#lang racket
等非类型化语言,这两个参数中可以有任何类型

#lang racket

(cons 3 #f) ; ==> (3 . #f)

嗨,根据我的理解,pl在“cons”中应该非常相似,但也许我错了。。。你知道怎么解决这个问题吗?我已经更新了答案。我相信你已经切换了第一个和第二个参数。嘿,是的,你做“(cons(从混合列表中获取最小值和最大值(第一lol))acc)时的权利”一切都正常,但我得到(()”((8 10))而不是(((8 10)),因此我尝试做:“(cons acc(从混合列表中获取最小值和最大值(第一lol))”@Tomer If
(cons'a'(b));=>(a b)
以错误的顺序给出答案,然后
(cons'(b)'a);==>((b).a)
不是解决方案。在最后一步中,在
acc
上执行
反向操作是可行的。