Stream 流的这种实现是如何工作的?
我对Scheme、函数式编程,特别是streams是一个全新的概念。以下流中的前五个整数是什么Stream 流的这种实现是如何工作的?,stream,scheme,racket,Stream,Scheme,Racket,我对Scheme、函数式编程,特别是streams是一个全新的概念。以下流中的前五个整数是什么 (define (mystery x y z) (cons x (lambda () (mystery y z (+ x y z))))) (mystery 1 2 3) 这是如何工作的,我如何在Racket中使用它?这将返回一个由数字和函数组成的列表。在第一次调用后,函数与调用时得到的函数相同(神秘2 3 6) 它是如何工作的?cons只是列出它的两个参数
(define (mystery x y z)
(cons x
(lambda ()
(mystery y z (+ x y z)))))
(mystery 1 2 3)
这是如何工作的,我如何在Racket中使用它?这将返回一个由数字和函数组成的列表。在第一次调用后,函数与调用时得到的函数相同(神秘2 3 6)
它是如何工作的?cons只是列出它的两个参数,在本例中是一个值和计算lambda函数的结果,lambda函数本身就是一个函数,它返回一个由数字和函数组成的列表。在第一次调用后,函数与调用时得到的函数相同(神秘2 3 6)
它是如何工作的?cons只是列出它的两个参数,在本例中是一个值和计算lambda函数的结果,lambda函数本身就是一个函数,它返回一个由数字和函数组成的列表。在第一次调用后,函数与调用时得到的函数相同(神秘2 3 6)
它是如何工作的?cons只是列出它的两个参数,在本例中是一个值和计算lambda函数的结果,lambda函数本身就是一个函数,它返回一个由数字和函数组成的列表。在第一次调用后,函数与调用时得到的函数相同(神秘2 3 6)
它是如何工作的?cons只是列出了它的两个参数,在本例中是一个值和计算lambda函数的结果,lambda函数本身就是一个函数,我们可以通过实现一个过程来检查无限流的内容,该过程消耗给定数量的元素并在列表中返回它们,例如:
(define (print strm n)
(if (zero? n)
'()
(cons (car strm)
(print ((cdr strm)) (sub1 n)))))
如果我们将其应用于您的流,我们将获得以下结果:
(print (mystery 1 2 3) 5)
=> '(1 2 3 6 11)
虽然在这种情况下,如果我们试图了解引擎盖下发生的事情,它会更有用。最后,这只是一系列过程调用,如果我们注意到在每次调用时传递的参数,就很容易找到答案。查看下表中的第一列,记住流是由cons
ing所有x
构建的:
x y z
--------
1 2 3
2 3 6
3 6 11
6 11 20
11 20 37
我们可以通过实现一个过程来检查无限流的内容,该过程使用给定数量的元素并在列表中返回它们,例如:
(define (print strm n)
(if (zero? n)
'()
(cons (car strm)
(print ((cdr strm)) (sub1 n)))))
如果我们将其应用于您的流,我们将获得以下结果:
(print (mystery 1 2 3) 5)
=> '(1 2 3 6 11)
虽然在这种情况下,如果我们试图了解引擎盖下发生的事情,它会更有用。最后,这只是一系列过程调用,如果我们注意到在每次调用时传递的参数,就很容易找到答案。查看下表中的第一列,记住流是由cons
ing所有x
构建的:
x y z
--------
1 2 3
2 3 6
3 6 11
6 11 20
11 20 37
我们可以通过实现一个过程来检查无限流的内容,该过程使用给定数量的元素并在列表中返回它们,例如:
(define (print strm n)
(if (zero? n)
'()
(cons (car strm)
(print ((cdr strm)) (sub1 n)))))
如果我们将其应用于您的流,我们将获得以下结果:
(print (mystery 1 2 3) 5)
=> '(1 2 3 6 11)
虽然在这种情况下,如果我们试图了解引擎盖下发生的事情,它会更有用。最后,这只是一系列过程调用,如果我们注意到在每次调用时传递的参数,就很容易找到答案。查看下表中的第一列,记住流是由cons
ing所有x
构建的:
x y z
--------
1 2 3
2 3 6
3 6 11
6 11 20
11 20 37
我们可以通过实现一个过程来检查无限流的内容,该过程使用给定数量的元素并在列表中返回它们,例如:
(define (print strm n)
(if (zero? n)
'()
(cons (car strm)
(print ((cdr strm)) (sub1 n)))))
如果我们将其应用于您的流,我们将获得以下结果:
(print (mystery 1 2 3) 5)
=> '(1 2 3 6 11)
虽然在这种情况下,如果我们试图了解引擎盖下发生的事情,它会更有用。最后,这只是一系列过程调用,如果我们注意到在每次调用时传递的参数,就很容易找到答案。查看下表中的第一列,记住流是由cons
ing所有x
构建的:
x y z
--------
1 2 3
2 3 6
3 6 11
6 11 20
11 20 37
伟大的完美答案!我想我现在对溪流的概念有了清晰的理解。太棒了!完美答案!我想我现在对溪流的概念有了清晰的理解。太棒了!完美答案!我想我现在对溪流的概念有了清晰的理解。太棒了!完美答案!我想我现在已经清楚地理解了流的概念。非常感谢你的回答。非常感谢你的回答。非常感谢你的回答。非常感谢你的回答。非常感谢你的回答。