根据单词在 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-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
。只有出现在随机列表中的单词才会被选中,并且它们将按照它们在原始句子中的相同顺序返回到输出列表中。
我身边有一句话,比如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-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
。只有出现在随机列表中的单词才会被选中,并且它们将按照它们在原始句子中的相同顺序返回到输出列表中。