0

すべての文字列を削除したリストを返そうとしています

(remove-strings '(("hello" 9) (29 10) ("cruel" "world") (1238 .12) (-53 "end"))))
=> ((9) (29 10) () (1238 .12) (-53))

これが私がこれまでに持っているコードです(define(remove-strings list)(filter string?list))

私はまた、リスト内のすべての負の数を二乗しようとしているので、'ive got

(define (neg-sqr list)
  (map square (filter negative? list)) ; filters out negatives in list and squares each number
)  

各負の数の2乗を取るため、2809を返す必要があります(-53 ^ 2)

ただし、上記のコードは機能していません。数字だけを取得できるように、ステップ1のコードを使用して文字列を削除する必要があるためか、アイテムが1レベルの深さでネストされているためだと思いますか?誰かが文字列の削除手順を手伝ってもらえますか?

4

3 に答える 3

1

これが負の数を取り除くためのコードです

(define (f2b items)
   (accumulate (lambda (x y)
 (cons (append 
    (map square (filter negative? (filter number? x))
)
(filter positive? (filter number? x))
(filter string? x)
) y)) () items))

ps。すべての正の数の合計を1で計算しましたか?

于 2012-10-31T03:58:38.207 に答える
1

次のような累積関数を使用します。

(define (accumulate op initial sequence)
  (if (null? sequence)
      initial
      (op (car sequence)
          (accumulate op initial (cdr sequence)))))

正確に蓄積するための呼び出しを行うのは簡単なことです。

(define (remove-strings n)
   (accumulate (lambda (x y) (cons (filter number? x) y)) () n)
  )

これが行うことは、プロシージャラムダを各サブリストに繰り返し適用し、それらをまとめてコンスして、文字列のない新しいリストを残します。

于 2012-10-30T23:57:39.393 に答える
0

filter引数としてリストを取ります。
ただし、 への入力remove-stringsはリストのリストであり、それらを個別に処理する必要があります。
おそらく、リスト内の各項目に関数を適用する方法を見つけられるでしょうか?

于 2012-10-30T11:29:07.823 に答える