• ベストアンサー

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))))) なんですが無限ループのようになるのかこれを実行すると固まって落ちてしまいます。 ご指摘よろしくお願いします。

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

  • ベストアンサー
回答No.2

(define (s n) (si n 0)) (define (si n x)  (if (= n 0)     x    (si (- n 1) (+ n x))))

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.3

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

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

(if (= n 1) (x) (si (- n 1) (+ n x))) のところ, なんで (x) なの?

ainobakuda
質問者

補足

回答ありがとうございます。確かに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))))) でも出来ませんでした。

関連するQ&A

専門家に質問してみよう