前提・実現したいこと
学校のレポートで、LISPを使って、配列の要素を取得する関数valを作らないといけません。
valは(val l n)の形で呼び出すことができ、例えば
LISP
1> (val '(yoru hosi sora) 2) 2HOSI
のようにリストのn番目の要素(リストの先頭を1番目と数えます)を返します。
これを実現する為に、
n=1の時はcarを使ってリストの先頭を返し、
n>1の時はn-1回だけcdrを使ってリストの先頭以外の部分を取ってからcarを使って要素を取り出す
という事をしたいです。(nがリストの要素数を超えた時などの例外処理は後で実装します)
この関数を書いたのですが、n=1の時以外が以下のようなメッセージが出ます。
これはどのように書き換えればいいのでしょうか。
該当のソースコード
Lisp
1(defun val (l n) 2 (cond ((= n 1) (car l)) 3 (t (val((cdr l) - n 1)))))
エラーメッセージ
(val '(kawa umi hosi sima) 2)
Error: (CDR L) is invalid as a function.
Fast links are on: do (si::use-fast-links nil) for debugging
Error signalled by COND.
Backtrace: system:universal-error-handler > evalhook > val > cond > VAL
Broken at COND.
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/06/26 05:47