Stream 泰勒级数格式

Stream 泰勒级数格式,stream,scheme,taylor-series,Stream,Scheme,Taylor Series,我一直在做一些家庭作业,写一些代码,但实际上找不到它不起作用的原因。这部分工作的主要思想是生成一个流,为给定的X(我猜是角度)提供余弦函数泰勒级数的元素。无论如何,这是我的代码,如果有人能告诉我它不起作用的原因,我会很高兴:) 然而,这不起作用,我也不知道为什么 我正在使用Dr.Scheme 4.2.5,将语言设置为“编程语言精要第三版”。因为我感觉很好(并且对Scheme怀旧),我实际上在仔细阅读您的代码以查找错误。据我所见,有两个问题使代码无法正常运行: 如果我正确理解您的代码(强制exp)

我一直在做一些家庭作业,写一些代码,但实际上找不到它不起作用的原因。这部分工作的主要思想是生成一个流,为给定的X(我猜是角度)提供余弦函数泰勒级数的元素。无论如何,这是我的代码,如果有人能告诉我它不起作用的原因,我会很高兴:)

然而,这不起作用,我也不知道为什么

我正在使用Dr.Scheme 4.2.5,将语言设置为“编程语言精要第三版”。

因为我感觉很好(并且对Scheme怀旧),我实际上在仔细阅读您的代码以查找错误。据我所见,有两个问题使代码无法正常运行:

如果我正确理解您的代码
(强制exp)
应该计算
exp
,但是您直接返回它(未计算)。因此,它可能应该被定义为
(define(force exp)(exp))

第二个问题在lambda中:
(lambda()((tylorElementCosine x)(+n1))
将计算到泰勒级数的下一个元素,而它应该计算到流。您可能想要这样的东西:
(lambda()(iter(+n1))

我没有检查输出是否正确,但经过这些修改后,它至少可以运行。因此,如果代码还有任何问题,则应在使用的公式中列出


不过,我建议下次你在作业上需要帮助时,至少告诉我们问题的具体表现形式和你已经尝试过的内容(社区不赞成“这里有一些代码,请帮我修复”之类的问题)。

你认为“它不起作用”是一个准确的失败描述吗?它究竟是如何不起作用的?你试过调试它吗?是的,我没有试过,一旦代码存在,它就不是一个失败,90%的代码工作起来像一个符咒,只有2个逻辑错误存在…没有错误:)谢谢,它工作起来像一个符咒。。。我对这两个错误的看法都不好:)对不起,我第一次在这里寻求帮助时提出了这种蹩脚的问题。。。我很少在编程方面寻求帮助,因为我在大学里是一名C语言教师。。。谢谢!事实上,我犯了第一个错误,试图纠正我唯一的错误,那就是lambda表达式…@nocogod:问题的风格没有问题,我只是不得不提一下,因为那些基本上说我有问题的问题,请帮助我,通常都不太受欢迎(出于明显的原因,听起来好像请完成我所有的工作)。因此,将来你可以更好地表述你的问题;)
(define (force exp) exp)
(define (s-car s) (car s))
(define (s-cdr s) (force (cdr s)))

; returns n elements of stream s as a list
(define (stream->list s n)
  (if (= n 0) 
      '()
      (cons (s-car s) (stream->list (s-cdr s) (- n 1)))))

; returns the n-th element of stream s
(define stream-ref (lambda (s n)
                     (if (= n 1)
                         (s-car s)
                         (stream-ref (s-cdr s) (- n 1)))))

; well, the name kinda gives it away :) make factorial n!
(define (factorial x)
        (cond ((= x 0) 1)
              ((= x 1) 1)
              (else (* x (factorial (- x 1))))))

; this function is actually the equation for the 
; n-th element of Taylor series of cosine
(define (tylorElementCosine x)
  (lambda (n)
     (* (/ (expt -1 n) (factorial (* 2 n))) (expt x (* 2 n)))))

; here i try to make a stream of those Taylor series elements of cosine
(define (cosineStream x)
  (define (iter n)
    (cons ((tylorElementCosine x) n)
          (lambda() ((tylorElementCosine x) (+ n 1)))))
  (iter 0))

; this definition should bind cosine
; to the stream of taylor series for cosine 10
(define cosine (cosineStream 10)) 
(stream->list cosine 10) 
; this should printi on screen the list of first 10 elements of the series