Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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
Loops for-loop-in方案_Loops_Lisp_Scheme_Racket_Collatz - Fatal编程技术网

Loops for-loop-in方案

Loops for-loop-in方案,loops,lisp,scheme,racket,collatz,Loops,Lisp,Scheme,Racket,Collatz,我有点困惑如何在方案中构造for循环。for循环应在第二部分中实现。其中,它获取一个数字列表,并在第一部分的列表中插入每个元素以查找长度。我需要电缆来获得第一个元素,但是我需要一个for循环或者其他什么来获得这样的输出:'710610637 这是我的密码: #lang racket ; Part I (define (sequence n) (cond [(= n 1) (list n)] [(even? n) ( cons n(sequence( / n 2)))] [(odd?

我有点困惑如何在方案中构造for循环。for循环应在第二部分中实现。其中,它获取一个数字列表,并在第一部分的列表中插入每个元素以查找长度。我需要电缆来获得第一个元素,但是我需要一个for循环或者其他什么来获得这样的输出:'710610637 这是我的密码:

#lang racket
; Part I
(define (sequence n)
(cond  [(= n 1)
      (list n)]
[(even? n)
( cons n(sequence( / n 2)))]
[(odd? n) 
( cons n(sequence (+(* n 3) 1))) ] ))

(sequence 3)

; Part II
(define (find-length items)
( cond [(null? items)
      (list items)]
  [find-length(length(sequence(car items))) ]   
  ))

  (find-length '(10 13 16 22 95 158))
以下是输出:

 '(3 10 5 16 8 4 2 1)
 7

让我弄清楚,你需要项目列表中每个数字的Collatz序列的长度吗?很明显,这是家庭作业,所以这次我不能直接回答。以下是解决方案的总体结构,请填写以下空白:

(define (find-length items)
  (if (null? items)           ; if the list is null
      <???>                   ; return the empty list
      (cons                   ; otherwise `cons` the
       (length <???>)         ; length of Collatz sequence of first element
       (find-length <???>)))) ; and recur over the rest of the list

请注意,您的答案几乎是正确的-此过程的基本情况只是空列表,而您忘记调用递归。在Scheme中,至少在已知的情况下,尽量不要考虑,而在循环中:根据递归实现迭代,这是惯用的方法。在你弄清楚之后,你可以开始使用一个内置的球拍了。

让我弄清楚,你需要物品列表中每个数字的项圈序列的长度吗?很明显,这是家庭作业,所以这次我不能直接回答。以下是解决方案的总体结构,请填写以下空白:

(define (find-length items)
  (if (null? items)           ; if the list is null
      <???>                   ; return the empty list
      (cons                   ; otherwise `cons` the
       (length <???>)         ; length of Collatz sequence of first element
       (find-length <???>)))) ; and recur over the rest of the list

请注意,您的答案几乎是正确的-此过程的基本情况只是空列表,而您忘记调用递归。在Scheme中,至少在已知的情况下,尽量不要考虑,而在循环中:根据递归实现迭代,这是惯用的方法。在你弄清楚之后,你就可以开始使用一个内置的球拍了。

我不想给出确切的答案,但是你可以重复整个列表,像这样找到这个长度

(define (length lst)
(if (null? items)
'()
(+ 1  (length(cdr lst)))))

通过这种方式,您可以递归地访问列表中的所有元素。它发现第一个元素加上+1,然后试图找到cdr列表的长度,该长度等于长度lst-1。它会一直这样做,直到它到达列表的末尾。

我不想给出确切的答案,但是你可以重复整个列表,然后像这样找到这个长度

(define (length lst)
(if (null? items)
'()
(+ 1  (length(cdr lst)))))

通过这种方式,您可以递归地访问列表中的所有元素。它发现第一个元素加上+1,然后试图找到cdr列表的长度,该长度等于长度lst-1。它会一直这样做,直到到达列表的末尾。

输出似乎与输入不匹配。您希望此输入的结果是什么?:“查找长度”10 13 16 22 95 158输出应为:'7 10 5 16 106 37,,我只得到了第一个元素,即7。输出似乎与输入不匹配。您希望此输入的结果是什么?:查找长度'10 13 16 22 95 158输出应该是:'7 10 5 16 106 37,,我只得到了第一个元素7谢谢你,但是你能解释一下我如何在列表的其余部分重复出现吗,我使用了cdr,但它会将列表返回到第一部分,因此只接受number@user2070173您所处的轨道是正确的:使用cdr注意,在最后一行中,您没有调用sequence过程—您调用的是find length,它接收一个列表作为参数—因此cdr返回的值是正确的!你真的应该,真的看看《如何设计程序》或《小阴谋家》,这两本书都会教你如何正确地思考解决方案中的问题。谢谢你,但你能解释一下我是如何在列表的其余部分重复出现的吗,我使用了cdr,但它会将列表返回到第一部分,因此只接受number@user2070173您所处的轨道是正确的:使用cdr注意,在最后一行中,您没有调用sequence过程—您调用的是find length,它接收一个列表作为参数—因此cdr返回的值是正确的!你真的应该,真的看看如何设计程序或小阴谋家,这两本书都会教你如何正确思考解决方案中的问题。