TRUE = 11111 gt = $(shell if [ $1 -gt $2 ] ; then echo $(TRUE); fi) lt = $(shell if [ $1 -lt $2 ] ; then echo $(TRUE); fi) le = $(shell if [ $1 -le $2 ] ; then echo $(TRUE); fi) qsort = \ $(if $(call le,$(words $1),1),$1, \ $(call qsort, \ $(foreach i,$1, \ $(if $(call gt,$(firstword $1),$i), $i,))) \ $(firstword $1) \ $(call qsort, \ $(foreach i,$1, \ $(if $(call lt,$(firstword $1),$i), $i,)))) data = $(shell od -vAn -N10 -w1 -tu1 < /dev/urandom) all: @echo $(call qsort, $(data))$(data) 給定自十個隨機亂數,取於 /dev/urandom,原理是讀入二進位的亂數資料後,透過 od 指令將每一個 byte 轉換成一個無符號整數。當然重點是 "qsort",我們可看到 Makefile 中的宣告與實做中,遞迴地呼叫自身,也就是 $(call qsort, ...) 的動作,將 "divine and conquer" 的想法予以實現:先分成左右兩半,再來排序。 取得預先準備的 [Makefile.qsort],執行的情況類似以下輸出:
$ make -f Makefile.qsort 2 20 29 58 88 165 172 230 242 246既然輸入資料取於亂數,所以只要看到遞增數列即可。
字的顏色太亮了,讀起來好痛苦
由 近視加閃光 發表於 June 28, 2008 10:06 AM@gungyeliao,
小弟用 vim 來作 syntax highlighting 並將輸出的 HTML 貼在 blog 上,使用方式如下:
vim -f +"syn on" +"let html_use_css = 1" +"run! syntax/2html.vim" +"wq" +"q" Makefile.qsort
不過看來視覺效果很不理想,兄臺有其他方式可產生 colorized HTML for Makefile 嗎?謝謝!
由 jserv 發表於 June 28, 2008 10:19 AM把 pre.code 的底色改成黑色吧…
由 Roy 發表於 June 28, 2008 10:59 AMJserv最近迷上了functional programming嗎?
由 lexical 發表於 June 28, 2008 11:26 AMvim有一個plugin叫作ScreenShot應該會比較好用一點。
由 Paul Hsu 發表於 June 28, 2008 01:04 PM