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? を使うんじゃないの?