こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

QNo.6173218

すぐに回答ほしいです

質問者が選んだベストアンサー

(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)

ANo.3

ああ, どうでもいい話だけど, この形だと Scheme ではないかな. Lisp の「方言」といえば方言だけど, いろいろと違うところがあるので「似てるけど違う言語」と思った方がいいかもね.
そして, Lisp と Scheme の決定的な違いにより Lisp では (期待した動作をしないという点では同じだけど) 単に「関数 x が定義されていない」で終わるだけのはず. よほど腐った処理系でない限り「固まって落ちる」ということはない.

投稿日時 - 2010-09-11 22:49:49

ANo.1

(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