根据单词在 Scheme 中句子中出现的顺序排列单词列表

Arranging a list of words according to the order they occur in a sentence in Scheme

我身边有一句话,比如The game is played on a level playing field.

现在,我有一个单词列表(played is the)。这些是随机给我的单词。

现在,我必须根据它们在句子中出现的顺序对它们进行排序。我如何在 Scheme 中执行此操作? SRFI 库中是否有任何功能可以帮助我解决这个问题?我无法掌握如何递归执行此操作。

这很简单。如果你对整个句子使用 filter,那么所有符号的顺序列表,作为列表和使用 memq 的谓词在你作为参数给出的符号列表中找到一个符号。

如果您还没有在 guile 中定义,您会在 SRFI-1 中找到 filter

我已经对其进行了测试,它非常有效,但我不会在此处 post 它,因为您没有 post 在您的问题中编写代码。

我会基于 SRFI-1 (as suggested by @Sylwester) and SRFI-26filter 编写一个实现,因为我碰巧喜欢 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。只有出现在随机列表中的单词才会被选中,并且它们将按照它们在原始句子中的相同顺序返回到输出列表中。