Scheme—如果列表中的每个元素都是由两个元素组成的列表,则返回T/F的函数
我试图编写一个函数,返回T/F,关于一个列表是否包含两个元素,这两个元素可以是任何表达式。我对这个计划还很陌生,一直在思考如何决定如何着手做这件事。我尝试过使用if、cond和lambda的所有方法,但都没有成功。我似乎很难弄清楚如何让Scheme遍历整个列表,并返回最后是否为T/F 我正在寻找的一些例子:Scheme—如果列表中的每个元素都是由两个元素组成的列表,则返回T/F的函数,scheme,Scheme,我试图编写一个函数,返回T/F,关于一个列表是否包含两个元素,这两个元素可以是任何表达式。我对这个计划还很陌生,一直在思考如何决定如何着手做这件事。我尝试过使用if、cond和lambda的所有方法,但都没有成功。我似乎很难弄清楚如何让Scheme遍历整个列表,并返回最后是否为T/F 我正在寻找的一些例子: (foobar? '((a 1)(b 2))) #t (foobar? '((foo 100)(bar 2 3))) #f (foobar? '((a 1) b (c 3))) #f (fo
(foobar? '((a 1)(b 2)))
#t
(foobar? '((foo 100)(bar 2 3)))
#f
(foobar? '((a 1) b (c 3)))
#f
(foobar? '((a 1) . 2))
#f
任何帮助都将不胜感激
有两个元素?
确定一个列表是否正好有两个元素。这应该不会太难all have two element?
,该函数确定列表中的所有元素是否恰好是两个元素的列表。有两种情况需要考虑:
- 基本情况:空列表中没有不包含两个元素的元素(因为它没有任何元素)。因此,返回
#t
- 递归:
和(有两个元素?(car l))
都必须为真(都有两个元素?(cdr l))
如果缩进正确,这是七行代码。我的方案有点生疏,但似乎解决以下问题才是真正需要做的:给定某个内容,如果是列表,则返回其长度,否则返回零。获取列表的长度很容易:如果为空,则为零;否则,1+尾巴的长度。检查这件事是否是一个列表也应该是可能的。调用执行此长度列表的函数
现在,您的解决方案是:如果头部的LengthOfList为2,应用于尾部的函数返回true或列表为空,则为true,否则为false 那么,继续你到目前为止所说的(我会在我弄清楚的时候继续更新):
(定义(检查长度?l)(if(eq?(长度)2)#t#f))
(定义(都有两个元素?l)(if(null?l)#t);递归
我不确定您是否理解如何描述递归部分。如果空列表的基本情况返回true,那么您希望我调用has两个元素作为列表的第一个元素?@user1032208:首先观察(如果(eq?(长度l)2)#t#f)
等效于(eq?(长度l)2)
。至于递归,在你的教科书中的列表中查找一个递归函数的例子,研究它的结构,也许复制它的骨架。你离得很近了。@user1032208:oh,请使用=
而不是eq?
来实现数值相等。谢谢你迄今为止的帮助。这是我在仔细挑选之后得到的在这里:(define(有两个元素?l)(=(长度l)2))
(define(所有元素都有两个元素?l)(cond((null?l))((和(检查长度?(car l))(zipper?(cdr l)))(else(f))我开始测试用例,它似乎工作得很好,直到我通过了这样的列表:((a1)b(c3))在报告中,它抱怨b不是一个“合适的列表”。关于如何解决这个问题,有什么想法吗?