僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。
まず指定した範囲だけを出力。
(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や内容が変った場合はあしからず。