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

时间:2015-03-15 14:59:28

标签: scheme guile

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

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

现在,我必须按照句子中出现的顺序对它们进行排序。我如何在Scheme中执行此操作? SRFI库中是否有任何功能可以帮助我?我不能理解如何递归地做这件事。

2 个答案:

答案 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。只会选择随机列表中出现的那些单词,并且它们将按照与原始句子中找到的顺序在输出列表中返回。