トップ «前の日記(2016-05-25(Wed)) 最新 次の日記(2016-05-28(Sat))» 編集

屑俺日記

僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。


2016-05-26(Thu) 雨になる予想を見ていたのだけど

一部抽出で足りるか

まず指定した範囲だけを出力。

(defun mymid (l first last)
  (cond
   ((null l) nil)
   ((<= last 0) nil)
   ((<= first 1)
    (cons (car l)
          (mymid (cdr l)
                 (1- first)
                 (1- last))))
   (t
    (mymid (cdr l)
           (1- first)
           (1- last)))))
 
(mymid '(1 2 3 4 5) 2 4)
(2 3 4)
(mymid '(1 2 3 4 5) 3 3)
(3)

指定した範囲以外を出力。

(defun rmmid (l first last)
  (cond
   ((null l) nil)
   ((<= last 0) (cons (car l)
                      (rmmid (cdr l)
                             (1- first)
                             (1- last))))
   ((<= first 1) (rmmid (cdr l)
                        (1- first)
                        (1- last)))
   (t
    (cons (car l)
          (rmmid (cdr l)
                 (1- first)
                 (1- last))))))
 
(rmmid '(1 2 3 4 5 6 7) 3 3)
(1 2 4 5 6 7)
(rmmid '(1 2 3 4 5 6 7) 2 5)
(1 6 7)

偶数と奇数と

を抽出してみた。
もう少しだ。

(defun even (l)
  (cond
   ((null l) nil)
   ((null (cdr l)) nil)
   (t
    (cons (car (cdr l))
          (even (cdr (cdr l)))))))
 
(even '(1 2 3 4 5))
(2 4)
(defun odd (l)
  (cond
   ((null l) nil)
   (t
    (cons (car l)
          (odd (cdr (cdr l)))))))
 
(odd '(1 2 3 4 5))
(1 3 5)

検索して出てきた問題

3で割ると1余り、4で割ると2余り、5で割ると3余る自然数、らしい (検索結果のリンク先は読んでいない)。
と同工異曲であるが、gaucheで解いてみた。
剰余は手習い本にあったはず。

(define %
  (lambda (n m)
    (cond
     ((> n m) n)
     (else
      (% (- n m) m)))))
 
(define  tff
  (lambda (max)
    (cond
     ((zero? max) '())
     ((and (= (% max 3) 1)
           (= (% max 4) 2)
           (= (% max 5) 3))
      (cons max (tff (- max 1))))
     (else
      (tff (- max 1))))))
gosh> (tff 500)
 
(478 418 358 298 238 178 118 58)

リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。

index.htmlは ここから。