2016-11-23 4 views
1
内のリストから最小値と最大値の範囲内の要素

私はスキームに新しいですし、現在(ラケットのバージョン)を使用していない、ので、私はフィルタとして機能し、そのような内蔵されていないとなど収集スキーム

マイ今の仕事は、私の、入力されたリストから要素を取得し、私の「LST」は、例えば、変数は、私が持っている(2 4 1 6 5 4 7 3)

では私の MaxValueを

MinValueプロパティ上方および下方にあるものだけそれから取ることです

私の私は似たようなのような

(remove (< # minVal) lst) 

を適用した後、今では技術的に削除を与え、取り残さなければならないようにするため、私は5

を持っている私のMaxValue2

持っている "MinValue"

(2 4 4 3) 

しかし、エラーが発生しています:

READ from #<INPUT CONCATENATED-STREAM #<INPUT STRING-INPUT-STREAM> #<IO TERMINAL-STREAM>>: objects printed as # in view of *PRINT-LEVEL* cannot be read back in 

主な質問:

んスキームは削除/削除-場合ときの機能が使用されているリストを反復される#のような特定の定義された変数を持っているので、私はそれを使用することができますか?

(remove (< # minVal) lst) 

ありがとう:

ありますが、このような方法で動作するために、これを取得する方法です!

タグ「宿題」私はのfilter手順を含む知っているほぼすべてのスキームは、それがラケットに固有のものではないですが、あなたはそれを使用することができるはずがあるはずですが、私はまだ

+0

どのスキームを使用していますか? Lispのエラーメッセージのように見えます。 – molbdnilo

答えて

0

それを作成することはできません(removeではありませんこの仕事のための適切なツール)。

は、単に順番に各要素を受け取る lambdaを渡すと、要素が出力リストに行くこれを​​使用して決定するための任意の条件を設定することができます。

(filter (lambda (e) (and (>= e 2) (< e 5))) 
     '(2 4 1 6 5 4 7 3)) 

=> '(2 4 4 3) 

がそこには#変数ではありません、そのリストを反復処理し、あなたを与えますそれぞれの要素を順番に再帰を使用して明示的にトラバースするか、リストとλを必要とする組み込みプロシージャーのいずれかを使用する必要があります。ラムダのパラメーターは各要素を表します。何らかの理由であなたがfilterを使用することを許可されていない場合は

、それは我々がremoveを使用する必要がないことに気づき、再びゼロからそれを実装し、するのは簡単だし、そのpredは、要素のそれぞれに呼び出されます:

(define (filter pred lst) 
    (cond ((null? lst) '()) 
     ((pred (car lst)) 
     (cons (car lst) (filter pred (cdr lst)))) 
     (else (filter pred (cdr lst))))) 
+1

ありがとう!それはそれを説明しました! – Sparrow