Recursion 排列成对的列表

Recursion 排列成对的列表,recursion,scheme,Recursion,Scheme,有谁能给我一个很好的实现,说明如何使用helper函数(基于每个对的car值)在scheme中对一系列对进行排序?例如,“((32)(12)(84)(06))应按“((06)(12)(32)(84))排序。这似乎是一件很简单的事情,但出于某种原因,我画了一个空白。首先,您可以使用您喜欢的内置排序例程,并指定它按汽车进行排序,例如在Common LISP中 (sort ls #'< :key #'car) 第二,如果你想重新实现它,你可以使用mergesort的方法:把列表分成单调递增的部

有谁能给我一个很好的实现,说明如何使用helper函数(基于每个对的car值)在scheme中对一系列对进行排序?例如,“((32)(12)(84)(06))应按“((06)(12)(32)(84))排序。这似乎是一件很简单的事情,但出于某种原因,我画了一个空白。

首先,您可以使用您喜欢的内置
排序
例程,并指定它按
汽车进行排序,例如在Common LISP中

(sort ls #'< :key #'car)
第二,如果你想重新实现它,你可以使用mergesort的方法:把列表分成单调递增的部分,然后两两合并,直到只剩下一个。在哈斯克尔

mergesortBy f xs
|空xs=[]

|[s]首先,您可以使用自己喜欢的内置
排序
例程,并将其指定为按
汽车
排序,例如在Common LISP中

(sort ls #'< :key #'car)
第二,如果你想重新实现它,你可以使用mergesort的方法:把列表分成单调递增的部分,然后两两合并,直到只剩下一个。在哈斯克尔

mergesortBy f xs
|空xs=[]

|顺便说一句,如果你不想给我确切的代码,我会很乐意使用基本情况。这是一个更大的程序的一部分,我想确保它是正确的。顺便说一句,如果你不想给我确切的代码,我会很高兴与基本情况。这是一个更大的程序的一部分,我想确保它是正确的。是否有一个更简单的函数,我可以使用一个助手函数自己创建,我也将自己创建?我不熟悉您提供给我的许多函数,也不太了解Scheme。您可以将Haskell理解为伪代码,并将其写在Scheme中。您(在评论中)确实说过您不需要“精确代码”。)您的方案是否具有排序功能?那么我的答案中的第二个代码片段就是您想要的;
lambda
是帮助函数,您只需将它拉到一边并给它命名:
(定义(我的比较a b)(<(汽车a)…)
。你可以在维基百科上阅读所有种类的排序算法(包括合并排序)。有没有一个更简单的函数我可以使用一个我也会自己创建的助手函数来创建自己?我不熟悉您提供给我的许多函数,也不太了解Scheme。您可以将Haskell理解为伪代码,并将其写在Scheme中。您(在评论中)确实说过您不需要“精确代码”。)您的方案是否具有排序功能?那么我的答案中的第二个代码片段就是您想要的;
lambda
是帮助函数,您只需将它拉到一边并给它命名:
(定义(我的比较a b)(<(汽车a)…)
。你可以在维基百科上阅读各种排序算法(包括合并排序)。