2

リスト内の数字だけを抽出する方法はありますか? 私は初級言語パッケージを使用しているので、残念なフィルターを使用できません。

(list a 1 2 bd 3 5) => 1 2 3 5 etc これをヘルパー関数の一部として使用したいのですが、わかりません!

ありがとう!

4

1 に答える 1

4

理想的には、この問題はfilter次のような高次の手順を使用して解決する必要があります。

(filter number? '(a 1 2 b d 3 5))
=> '(1 2 3 5)

...しかし、これは宿題のように見えるので、問題を手作業で解決する方法についていくつかのヒントを示します。空欄に記入するだけです。

(define (only-numbers lst)
  (cond (<???>                        ; is the list empty?
         <???>)                       ; return the em´pty list
        (<???>                        ; is the 1st element in the list a number?
         (cons <???>                  ; then cons the first element
               (only-numbers <???>))) ; and advance the recursion
        (else                         ; otherwise
         (only-numbers <???>))))      ; simply advance the recursion

このソリューションは、よく知られているテンプレート、つまりリストを再帰的に処理し、出力として新しいリストを作成するためのレシピに従っていることに注意してください。手順をテストすることを忘れないでください:

(only-numbers '(a 1 2 b d 3 5))
=> '(1 2 3 5)

(only-numbers '(1 2 3 4 5))
=> '(1 2 3 5)

(only-numbers '(a b c d e))
=> '()
于 2013-03-19T19:37:05.157 に答える