1

我有一句话,例如,The game is played on a level playing field

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

现在,我必须根据它们在句子中出现的顺序对它们进行排序。我如何在 Scheme 中做到这一点?SRFI 库中有什么功能可以帮助我吗?我无法掌握如何递归地执行此操作。

4

2 回答 2

1

这很简单。如果您使用filter整个句子,则按顺序列出所有符号,作为列表和谓词,用于memq在作为参数给出的符号列表中查找一个符号。

如果您没有在 guile 中定义它,您会filterSRFI-1中找到它。

我已经对其进行了测试,它就像一个魅力,但我不会在这里发布它,因为你没有在你的问题中发布代码。

于 2015-03-15T15:24:44.317 回答
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 回答