• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:schemeです)

schemeで月日を入力して日数を計算する方法

このQ&Aのポイント
  • schemeで月と日を入力して、4月1日から何日目なのかを計算する手続きを作成する方法についてわかりません。
  • 現在の年の4月1日から12月31日までを正しく計算できる方法がわからないです。
  • コンピュータに日数計算を任せて式を書く必要があると言われましたが、どうすればいいかわかりません。アドバイスをお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

どこまで shcemeを使えるのか(教わっているのか)がわからないのでちとあれですが、 たとえば4月以降の各月の日数をリストにして持たせます (30 31 30 31 31 30 31 30 31) これを元に、各月の1日めの通産日数を「計算」すればとか考えたんですがどうでしょう。 じつはSchemeにはないんですが Common-Lisp には maplist という関数があって (maplist #'(lambda (x) (apply #'+ x)) '(30 31 30 31 31 30 31 30 31)) →(275 245 214 184 153 122 92 61 31) のように通産日数のリストを簡単に作れます。 あとは再帰を使って、与えられた月から4月までさかのぼってその月の日数をもらっていく関数を書くとか。 >コンピュータに任せて式を書けばよいだけと言われたんですが ここをもう少し詳しく訊いてみてはどうでしょう?

pikapika12
質問者

お礼

なんとかできました。 ありがとうございます

その他の回答 (1)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.1

たとえば、 > ((= (- x 4) 7) (+ 210 y 4)) > ((= (- x 4) 8) (+ 240 y 4)))) のように、×月のときは30日×月の差+大の月による調整という数字を あらかじめ計算してプログラムに書くのではなくて、 5月は31日ある、6月は30日だけ、7月は…ということから 計算して日数を求めてしまえということではないですか?

pikapika12
質問者

補足

ん・・・ どんな式にすればいいんでしょう・・ 全ての月が30日なら >(+ (* (- x 4) 30) y) これでいいですよね? でも月ごとに日数は違うから、一つずつ書いていくしかないと思ったのですが。

関連するQ&A