2016-12-16 8 views
-2

私はLispでグリップを開始していますが、現時点でライプニーズの公式を使ってpiに近似する手続きを書こうとしています。私は近くにいると思うけど、どうやって進めるか分からない。現在の動作では、最初の計算が正しく行われますが、プログラムは終了して番号 '1'が表示されます。私は再帰的に次のように定義された関数を呼び出すことができる場合、私はわからないよ、条件分岐からの再帰呼び出し

;;; R5RS 
(define (pi-get n) 
    (pi 0 1 n 0)) 

(define (pi sum a n count) 
    ;;; if n == 0, 0 
    (if (= n 0) 0) 
    ;;; if count % 2 == 1, + ... else -, if count == n, sum 
    (cond ((< count n) 
     (cond ((= (modulo count 2) 1) 
       (pi (+ sum (pi-calc (+ 2 a))) (+ a 2) n (+ count 1))) 
       (pi 
       (- sum (pi-calc (+ 2 a))) (+ a 2) n (+ count 1)))))) 

(define (pi-calc a) 
    (/ 1.0 a)) 

謝罪これはちょっと読めない場合、私はちょうど今、Lispの数週間を学んでいると私は通常何の書式だろうわからないんだけど言語のためである。うまくいけば、私はいくつかのコメントを追加しました。

答えて

0

Sylwesterが言及したように、それは私の文法で間違いであることが判明しました。

;;; R5RS 
(define (pi-get n) 
(pi 1 1 n 0)) 

(define (pi sum a n count) 
(if (= n 0) 0) 
(cond ((< count n) 
    (cond ((= (modulo count 2) 1) 
      (pi (+ sum (pi-calc (+ 2 a))) (+ a 2) n (+ count 1))) 
      ((= (modulo count 2) 0) 
      (pi (- sum (pi-calc (+ 2 a))) (+ a 2) n (+ count 1)))) 
(display (* 4 sum)) (newline)))) 

(define (pi-calc a) 
(/ 1.0 a)) 
+1

'if'と' cond'とは関係ありません。あなたは 'cond'のためのカッコがほとんどなく、元の投稿のボックスが少なすぎます。これは答えの代わりに未定義の値として終わるケースを無視しています。特に最後の印字は戻り値を作るので、常に未定義になります。 – Sylwester

+0

ラケットは私に構文エラーを与えていないし、まだそれをしないので、それは奇妙です。また、実際の価値を返すことを望むなら、私は今までに金額を定義しておかなければならないことを理解していると思います。 – I2obiN

+0

最後の 'pi'のまわりのカッコが、プロシージャを述語として評価したプロシージャを呼び出すのではなく、その引数が結果の式になりましたので有効でした。構文エラーはありませんが、意図はほとんどありません。元のコードをどのようにフォーマットしたかを見てください。 – Sylwester

関連する問題