前提・実現したいこと
大学の授業でLISPを学んでいます。
分からなくなったので質問させていただきます。
関数 successor は2つの引数をとり、第 2 引数はリストである。
第 1 引数が第 2 引数の要素に含まれていれば、第 2 引数のリストの中で、第 1 引数と同じ要素の次の要素を返す。
ただし、第 1 引数と同じ要素がリストの最後である場合には、no-successor を返す。第 1 引数が第 2 引数に含まれ
ていなければ not-there と返す。
例: (successor 'x '(w x y z)) → y
(successor 'z '(w x y z)) → no-successor
(successor 'q '(a b c)) → not-there
発生している問題・エラーメッセージ
[46]> (successor 'z '(w x y z) ) NIL [47]> (successor 'w '(w x y z) ) X [48]> (successor 'a '(w x y z) ) NOT-THERE [49]>
該当のソースコード
lisp
1(defun successor (arg1 arg2) 2 (cond ((member arg1 arg2) 3 (if (equal arg1 (car (reverse arg2)))'no-successor) 4 (loop (cond ((equal arg1 (car arg2))(return (car (cdr arg2))))) 5 (setq arg2 (cdr arg2))))(t 'not-there))) 6
試したこと
memberで配列に単語があるのか確認し
単語が配列の最後尾の場合no-successorを表示しようと思っているのですが
NILが表記されてしまいます。
このNILはif文のreturnが上手くわたっていないのでしょうか
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/07 03:18
2021/05/07 03:44