如何用racket 寫乙個全排列的小程式

時間 2021-05-31 04:16:23

1樓:窗戶

不用lambda……好吧,可以用迭代來實現。這樣想來,其他答案似乎都不滿足題主要求了,因為用了過於高階的東西。

#lang

racket

(define

(perm

lst)

(define

(add

eles)(

define

(insert

lstposx)

(if(zero?

pos)

(cons

xlst)(

cons

(car

lst)

(insert

(cdr

lst)(-

pos1)x

))))

(define(it

snew

len-s-each

insert-pos)(

cond

((null?s)

new)

((

len-s-each)(

its(cons

(insert

(cars)

insert-pos

ele)

new)

len-s-each(+

insert-pos

1)))

(else(it

(cdrs)

(cons

(insert

(cars)

insert-pos

ele)

new)

len-s-each

0))))(if

(null?s)

(list

(list

ele))(it

s'()(

length

(cars))

0)))(if

(null?

lst)

(list

'())

(add

(car

lst)

(perm

(cdr

lst)))))

(for-each

displayln

(perm'(

1234

)))用的都是最純的元素,好吧,甚至還可以更純一點。減少list函式、length函式、小於函式的應用,照樣可以辦到,在我基礎上改改很簡單,留給題主吧。

2樓:netcan

(define

(permutationss)

(cond

[(empty?s)

empty][(

empty?

(rests))

(lists)]

[else

(let

splice[(l

'())(m

(firsts))

(r(rest

s))]((

map(

lambda(x

)(consmx

))(permutations(l

r)))(if

(empty?r)

empty

(splice

(consml

)(carr)(

cdrr

)))))]))

結果:(

permutations'(

123))

=>'((

123)

(132

)(21

3)(2

31)(

321)

(312))

如何用「天空,晚霞,你」寫乙個短故事?

月半大人 我們年少初識,那時的你像天空中的白色雲彩,不經世故渲染的純白色,穿著藍色校服向陽而奔。有幸陪你數十年,白髮奪目,你說你像落日,我覺得你更像晚霞,多彩而醇厚。我最喜歡的便是在天空下目映晚霞吻你額頭,目光所至全是我的晚霞。 RAINT 一年四季,唯獨夏天的天空最好看 桑花一直都這麼覺得。可她真...

如何用「厲害了,我的哥」寫乙個故事?

王皓 然而只是乙個真實故事,就發生在剛剛,座標北京 到家大概乙個小時了,等外賣的功夫想跟大家分享乙個人生贏家的故事。故事的主角就是今天載我回來的計程車司機,堵車路上的2個半小時前1個小時我的狀態是焦躁不安,無聊跟師傅攀談起來後,後邊的1個半小時我幾乎是張著嘴跪著跟他聊天的。師傅50歲,說拉完我這活就...

100 個數,如何遍歷得到所有全排列?

李沁 有個笨辦法不知行不行?演算法不好描述,反正就是挪來挪去的,跑下就知道了,有沒有大神解釋下這麼挪的原理是什麼?include include using namespace std using namespace arma int main int q r.n cols 1 int ends 0...