質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
LISP

LISPはプログラミング言語の一種であり、関数型言語に分類されています。 特徴として、括弧を多様する独特の構文を持ちます。

Q&A

1回答

982閲覧

Lispプログラムの質問です。

addsa

総合スコア0

LISP

LISPはプログラミング言語の一種であり、関数型言語に分類されています。 特徴として、括弧を多様する独特の構文を持ちます。

0グッド

0クリップ

投稿2021/05/23 16:43

Lisp プログラムの質問です。自分のプログラムではエラーが出ます。どこが間違っているでしょうか?

(1) 6歳から14歳の子は3000円を,15歳から21歳の子は5000円 をもらえて,これ以外の年齢の人はもらえないと決まって いるとする.年齢 xを引数として, x歳の子がもらえるお年玉の額を返す関数.ifを組み合わせて作る.
実行例 > (otoshidama 3) 0

(otoshidama 10) 3000
(otoshidama 18) 5000
(otoshidama 30) 0

自分のプログラム

(defun otoshidama (x) (if (<= x 5) 0 (if (=< x 21) (if (>= x 15) 5000 3000 ) 0)))

(2)リストy が(品目1 金額1 ... 品目 n 金額n) の形式になっている時,品目xの金額pをみつけて, pが予算z以内ならzからpを引いた金額を返す. pが予算zを超えていれば, yosan-overを返す.品目xがリストになければ,not-found を返す.
実行例

(setq y0 '(ateishoku 450 bteishoku 400 cteishoku 380)) (ATEISHOKU 450 BTEISHOKU 400 CTEISHOKU 380)
(kaimono 'bteishoku y0 1000) 600
(kaimono 'ateishoku y0 400) YOSAN-OVER
(kaimono 'tendon y0 1000) NOT-FOUND

自分のプログラム

( defun kaimono (x y z)

(let (y)

(if(=< x z) x-z 'yosan-over )))

よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hoshi-takanori

2021/05/23 18:42

・=< じゃなくて <= では。 ・引き算は x-z ではありません。 ・not-found にならないのでは。
guest

回答1

0

emacsのlispしかいじったことがないので,あまり自信はありませんが
(1)はhoshi-takanoriさんの指摘通り,=<<=ですね。

lisp

1(defun otoshidama (x) 2 (if (<= x 5) 3 0 4 (if (<= x 21) 5 (if (>= x 15) 6 5000 7 3000) 0)))

(2)のソースの感想としては

  • lispでは減算も関数なので,(- a b)の形に注意

という感じでしょうか?

  • 見つけた要素以後のリストを返すmember関数
  • リストの二つ目を返すcadr関数

を組み合わせて次のような感じでしょうか?

lisp

1(defun kaimono (x y z) 2 (let (s) 3 (setf s (member x y)) 4 (if s 5 (let (p) 6 (setf p (cadr s)) 7 (if (>= z p) (- z p) 8 'yosan-over)) 9 'not-found)))

投稿2023/06/07 15:50

ujimushi_sradjp

総合スコア2152

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問