Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/amazon-s3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scheme—如果列表中的每个元素都是由两个元素组成的列表,则返回T/F的函数_Scheme - Fatal编程技术网

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

我试图编写一个函数,返回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
(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不是一个“合适的列表”。关于如何解决这个问题,有什么想法吗?