我有一句话,例如,The game is played on a level playing field
。
现在,我有一个单词列表(played is the)
。这些是随机给我的话。
现在,我必须根据它们在句子中出现的顺序对它们进行排序。我如何在 Scheme 中做到这一点?SRFI 库中有什么功能可以帮助我吗?我无法掌握如何递归地执行此操作。
这很简单。如果您使用filter
整个句子,则按顺序列出所有符号,作为列表和谓词,用于memq
在作为参数给出的符号列表中查找一个符号。
如果您没有在 guile 中定义它,您会filter
在SRFI-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