1. ホーム
  2. scheme

[解決済み] ラケットのメンバー?

2022-02-19 09:47:01

質問内容

2011年に行われたBrian HarveyのSICPの講義を聞いています。 UCバークレー校のサイト . 彼は STkインタプリタ 私はラケットとDrRacketを使って授業に参加しています。私は、先生が授業で使う関数のうち、racketで定義されていないものをすべて定義しようとしています(たとえば word , butfirst , butlast ) を使って、さらに練習を重ねます。

を定義しようとすると、問題にぶつかります。 member? . 彼はリストや文字列でこれを使うことができ、次のようなことができます。

(member? 1 (list 1 2 3 4)) ;; works
(member? 'a '(a e i o u)) ;; works
(member? 7 17) ;; doesn't work
(member? #\e "Hello") ;; doesn't work

以下は、私の定義です。 member? を実行すると、上記のようになります。

(define (member? u lst)
  (not (equal? (member u lst) #f)))

これはリストで動作しているので、最初の2つは動作していることに意味があるわけです。を模倣した関数を作成することは可能でしょうか? member? をSTkで使用することはできますか?ドキュメントを見ていたら、文字列、リスト、非負整数、その他もろもろの定義が sequence のデータ型がありますが、関連するシーケンス関数が見当たりません。

どのように解決するのですか?

を使用することができます。 sequence-ormap を使用します。

(define (member? item seq)
  (sequence-ormap (lambda (x)
                    (equal? item x))
                  seq))

テストに

> (member? 7 17)
#t
> (member? #\e "Hello")
#t