eqan?
関数 eqan? は2つの引数が同じアトムのとき真となる関数。数に対しては=を、それ以外のアトムに対しては eq? を使って書け、と。
(use mymodule)
(define eqan?
(lambda (a1 a2)
(cond
((and (number? a1) (number? a2)) (o= a1 a2))
((or (number? a1) (number? a2)) #f)
(else (eq? a1 a2)))))
(print (eqan? 3 3))
(print (eqan? 3 7))
(print (eqan? 'a 'b))
(print (eqan? 'tomato 'tomato))
(print (eqan? 1 'tomato))
実行:
^o^ > gosh -I. eqan.scm #t #f #f #t #f
うまくいったようだ。
occur
関数 occur は lat の中にアトム a が何回現れたかを数える関数。
(use mymodule)
(define eqan?
(lambda (a1 a2)
(cond
((and (number? a1) (number? a2)) (o= a1 a2))
((or (number? a1) (number? a2)) #f)
(else (eq? a1 a2)))))
(define occur
(lambda (a lat)
(cond
((null? lat) 0)
((eqan? (car lat) a) (add1 (occur a (cdr lat))))
(else (occur a (cdr lat))))))
(print (occur 'cup '(coffee cup tea cup and hick cup)))
実行:
^o^ > gosh -I. occur.scm 3
こっちもうまくいった。
と思って答えを見たら、eqan? じゃなくて eq? を使ってるじゃないか。話の流れからして eqan? を使うんじゃないの?