
Lisp
Lisp
今リリカルLispをやっているのですが、
詰まってしまって答えがないので困っています。
問題は
(s n)を評価すると1+2+・・・+nが返るように関数をsiを定義する(ただしsは次のように定義されている define (s n) (si n 0) )
という問題です。
一応自分なりに考えたのが
(define si (lambda (n x) (if (= n 1) (x) (si (- n 1) (+ n x)))))
なんですが無限ループのようになるのかこれを実行すると固まって落ちてしまいます。
ご指摘よろしくお願いします。
投稿日時 - 2010-09-10 22:45:37
(define (s n) (si n 0))
(define (si n x)
(if (= n 0)
x
(si (- n 1) (+ n x))))
投稿日時 - 2010-09-10 23:44:59
このQ&Aは役に立ちましたか?
4人が「このQ&Aが役に立った」と投票しています
回答(3)
(if (= n 1) (x) (si (- n 1) (+ n x)))
のところ, なんで (x) なの?
投稿日時 - 2010-09-10 23:11:30
回答ありがとうございます。確かにxじゃないですね。。
直してみて
(define si (lambda (n x) (if (= n 1) 1 (si (- n 1) (+ n x)))))
これでも間違いになるんですがもし分かればご指摘お願いします。]
ちなみに
(define si (lambda (n x) (if (= n 0) 0 (si (- n 1) (+ n x)))))
でも出来ませんでした。
投稿日時 - 2010-09-10 23:41:29