#:g1: lisp 1.5でL-99 (P04 リストの長さ)

Posted 2008-04-23 16:37:00 GMT

-(http://www.ic.unicamp.br/~meidanis/courses/mc336/2006s2/funcional/L-99_Ninety-Nine_Lisp_Problems.html)
lisp 1.5には標準でLENGTHがあるようです。(エミュレータには何故か無いのですが…。)
SIZEは、再帰版で、SIZE-ITERは、ループ版ってことで書いてみました。ちなみに、DEFINEのは一度に複数の定義が書けます。

SIZE((A B C D E F))
SIZE-ITER((A B C D E F))

; FUNCTION EVALQUOTE HAS BEEN ENTERED, ARGUMENTS.. ; SIZE ; ; ((A B C D E F)) ; ; ; END OF EVALQUOTE, VALUE IS .. ; 6 ; ; FUNCTION EVALQUOTE HAS BEEN ENTERED, ARGUMENTS.. ; SIZE-ITER ; ; ((A B C D E F)) ; ; ; END OF EVALQUOTE, VALUE IS .. ; 6

DEFINE (( (SIZE (LAMBDA (LST) (COND ((NULL LST) 0) (T (ADD1 (SIZE (CDR LST)))))))

(SIZE-ITER (LAMBDA (LST) (PROG (L CNT) (SETQ CNT 0) (SETQ L LST) L (COND ((NULL L) (RETURN CNT))) (SETQ CNT (ADD1 CNT)) (SETQ L (CDR L)) (GO L)))) ))

comments powered by Disqus