我和我有一句话,例如The game is played on a level playing field
。
现在,我有一个单词列表(played is the)
。这些是给我的随机词。
现在,我必须按照句子中出现的顺序对它们进行排序。我如何在Scheme中执行此操作? SRFI库中是否有任何功能可以帮助我?我不能理解如何递归地做这件事。
答案 0 :(得分:1)
这很简单。如果你对整个句子使用filter
,那么按顺序使用所有符号的列表,作为列表和使用memq
来查找一个符号的谓词,作为参数给出的符号列表。
如果你没有在guile中定义它,你会在SRFI-1中找到filter
。
我已经测试了它,它就像一个魅力,但我不会在这里发布,因为你没有在你的问题中发布代码。
答案 1 :(得分:1)
我根据SRFI-1(由@Sylwester建议)和SRFI-26编写基于filter
的实现,因为我碰巧喜欢cut
宏用于currying功能。它会产生更短且更清晰的答案,只需确保所有单词都处于较低(或较高)的情况:
(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
。只会选择随机列表中出现的那些单词,并且它们将按照与原始句子中找到的顺序在输出列表中返回。