0

私は再帰的なコードを書き込もうとしていますx^yが、コードをどのように更新してもエラーが発生します。

コード:

    (defun power(x y) (if(> y 0) (* x (power(x (- y 1)))) (1)))

エラー:

CL-USER 11 : 5 >Power 2 3
Error: Undefined operator X in form (X (- Y 1)).

エラー:

CL-USER 11 : 5 >power(2 3)
Illegal argument in functor position: 2 in (2 3).
4

5 に答える 5

6

前の(正しい)回答を少し拡張するために、このバージョンではいくつかの慣用的な関数を使用しています。

(defun power (x y)
  (if (plusp y)
    (* x (power x (1- y)))
    1))
于 2013-09-03T10:38:33.587 に答える
2

CL は関数 x と関数 1 を呼び出したいと考えているため、グループ化に括弧を使用することはできません。余分な部分は次のように削除します。

 (defun power(x y) 
     (if (> y 0) 
         (* x (power x (- y 1)))
         1))

関数と同じように、括弧は外側に出ます。

 (power 2 3) ;==> 8
于 2013-09-03T10:37:57.540 に答える
1

Lisp 式で (X ...) と書くと、X が引数 .... で呼び出される関数であると主張していることになります。

あなたの問題は、式に括弧が多すぎることです。(power (x .. と書くと、この主張をしたことになります。代わりに (power (x ... と書きます。

于 2013-09-03T10:37:28.893 に答える
0

とりわけ、このコードを呼び出しています:

(power (x (- y 1)))

Sopowerはパラメーターとして呼び出され(x (- y 1))ます。本当に関数として呼び出しxますか?

于 2013-09-03T10:36:34.383 に答える