--- title: 'Lispの問題 1~3 from L-99: Ninety-Nine Lisp Problems' author: kazu634 date: 2010-08-29 wordtwit_post_info: - 'O:8:"stdClass":13:{s:6:"manual";b:0;s:11:"tweet_times";i:1;s:5:"delay";i:0;s:7:"enabled";i:1;s:10:"separation";s:2:"60";s:7:"version";s:3:"3.7";s:14:"tweet_template";b:0;s:6:"status";i:2;s:6:"result";a:0:{}s:13:"tweet_counter";i:2;s:13:"tweet_log_ids";a:1:{i:0;i:5333;}s:9:"hash_tags";a:0:{}s:8:"accounts";a:1:{i:0;s:7:"kazu634";}}' categories: - gauche - Lisp ---
「L-99: Ninety-Nine Lisp Problems」で掲載されている問題を解いてみました。この辺なら問題なさそう。
番号が増えていくと、手に負えなくなりそうだなぁ。。。
;; P01 (*) Find the last box of a list. ;; Example: ;; * (my-last '(a b c d)) ;; (D) (define (my-last l) (letrec ((temporary (lambda (a l) (cond [(null? l) a] [else (temporary (car l) (cdr l))])))) (temporary '() l))) (my-last '(a b c d)) ;; P02 (*) Find the last but one box of a list. ;; Example: ;; * (my-but-last '(a b c d)) ;; (C D) (define (my-but-last l) (cond [(null? l) '()] [(and (not (null? (cdr l))) (null? (cdr (cdr l)))) l] [else (my-but-last (cdr l))])) (my-but-last '(a b c d e f g)) ;; P03 (*) Find the K'th element of a list. ;; The first element in the list is number 1. ;; Example: ;; * (element-at '(a b c d e) 3) ;; C (define (element-at l index) (letrec ((temporary (lambda (l index count) (cond [(null? l) '()] [(eq? index count) (car l)] [else (temporary (cdr l) index (+ count 1))])))) (temporary l index 1))) (element-at '(a b c d e) -1)