0

通常のパラメーターとオプションのパラメーター n を使用して、LISP でこの関数を使用しています。

(defun lastplus (x &optional (n 0)) //default value for n is 0
    ( if (listp x) //if x is a list
        (
            (list (length x) (n)) //return list that contains length(x) and n
        )
        (n) //else return n
    )
)

リスナー ファイルで関数を使用しようとしていますが、次のエラーが表示されます。

CL-USER 13 : 4 > (lastplus 2 8) 

Error: Undefined function N called with arguments ().

私はLispWorks 6.0.1を使用しています

なぜこのエラーが発生するのか知っていますか?

4

1 に答える 1

11
(defun lastplus (x &optional (n 0)) //default value for n is 0
    ( if (listp x) //if x is a list
        (
            (list (length x) (n)) //return list that contains length(x) and n
        )
        (n) //else return n
    )
)

あなたのフォーマットスタイルはLispyではありません。

Lispフォーマットに適応する:

(defun lastplus (x &optional (n 0)) ; default value for n is 0
   (if (listp x) ; if x is a list
        ((list (length x) (n))) ; return list that contains length(x) and n
     (n)))

あなたが言った:cannot call function with optional parameter

できますよ。エラーメッセージは別のことを言っていました。オプションのパラメータを使用して関数を呼び出すことができます。エラーは関数内にあります。

エラーは次のように述べています。Error: Undefined function N called with arguments ().

Nつまり、存在しないという関数を呼び出しています。引数なし。のように(n)。あなたのコードをチェックしてください-あなたは見つけることができます(n)か?

今、自問してみてください。

  • 関数呼び出しはどのように見えますか?

  • 回答:開き括弧、関数、場合によってはいくつかの引数、閉じ括弧

  • どのように(n)見えますか?

  • 回答:関数呼び出しのように見えます。

  • それはあなたが望んでいたことですか?

  • 確かに違います。

  • 何が欲しかった?

  • 変数値。

  • それはどのように見えますか?

  • ただn

  • 他にエラーはありますか?

  • うーん。

  • 3行目のフォームはどうですか?

  • それも間違っているようです。

  • それも間違っています。同じエラー。

于 2012-06-05T20:55:22.873 に答える