1

たとえば、私には文がありますThe game is played on a level playing field

今、私は言葉のリストを持っています(played is the)。これらは私に与えられたランダムな言葉です。

ここで、文中に出現する順序に従って順序付けする必要があります。これをSchemeで行うにはどうすればよいですか?ここで私を助けるためにSRFIライブラリに何か関数はありますか? これを再帰的に行う方法がわかりません。

4

2 に答える 2

1

SRFI-1 (@Sylwester の提案による) およびSRFI-26に基づいて実装を作成しfilterます。これは、たまたま関数をカリー化するためのマクロが好きだからです。短くて明確な答えが得られます。すべての単語が小文字(または大文字)であることを確認してください。cut

(use-modules (srfi srfi-1) (srfi srfi-26))

(define (arrange-by-occurrence sentence random-words)
  (filter (cut memq <> random-words) sentence))

例えば:

(arrange-by-occurrence '(the game is played on a level playing field)
                       '(played is the))
=> (the is played)

それはどのように機能しますか?シンプルで、元の文を順番filterにトラバースし、単語ごとにランダムな単語リストに存在するかどうかをテストします-そのために使用します。ランダム リストに存在する単語のみが選択され、元の文で見つかったのと同じ順序で出力リストに返されます。memq

于 2015-03-15T16:02:33.800 に答える
1

これは非常に簡単です。filter文全体で使用すると、すべての記号が順番にリストされ、リストとして使用memqされ、引数として指定された記号のリストの中から 1 つの記号を見つけるために使用される述語になります。

guileでまだ定義していない場合はfilterSRFI-1で見つけることができます。

私はそれをテストしましたが、それは魅力のように機能しますが、質問にコードを投稿しなかったため、ここには投稿しません.

于 2015-03-15T15:24:44.317 に答える