5

我知道如何用我知道的所有其他语言做到这一点,但我刚刚开始使用 Lisp 并不太了解它。我的想法

  • 制作一个字符列表
  • 转换为 ascii 值
  • 种类
  • 转换回字符
  • 转换回字符串

显得手重脚轻。有没有更好的方法来做到这一点?我正在尝试编写一个函数,给定一个字符串,返回一个按字母排序的字符串。因此,例如:

gate => aegt
house => ehosu
door => door

此例程将用作字谜查找器的一部分。

谢谢!

4

3 回答 3

10

在 Common Lisp 中,字符串是序列,并且sort适用于任何序列类型,所以它可以解决问题。

这是一个例子:

(let ((the-string (copy-seq "this is the string")))
  (sort the-string #'char-lessp))
;; => "   eghhiiinrsssttt"

sort和的 Hyperspec 条目stable-sort。只需选择您的谓词( 的第二个参数sort)即可获得所需的排序顺序。

请注意,我copy-seq在示例中使用是因为sort具有破坏性 - 它就地修改了字符串。

于 2013-08-17T16:08:16.137 回答
6

sort函数采用一个序列,该序列已经是一个字符串,因此您唯一的问题是找到正确的比较函数。字符不是数字,所以你应该使用字符比较函数,例如char>

* (sort (copy-seq "hello") #'char>)

"ollhe"
于 2013-08-17T16:03:48.617 回答
2

字符串是一个字符序列。sort 对序列进行排序,因此它对字符串进行排序,就像对列表进行排序一样:

(setq tester (copy-seq "lkjashd")) =>  "lkjashd"
(stable-sort tester #'char-lessp) =>  "adhjkls"
tester => "adhjkls" ; NB: it mutates the string!
于 2013-08-17T16:05:09.733 回答