From 02a84743ddf5c8c27a36c4d5a20eaf3cd2a9aff4 Mon Sep 17 00:00:00 2001 From: Shinya Sato Date: Sun, 28 Aug 2022 20:40:57 +0900 Subject: Update for n-queens --- comparison/SML/Makefile | 2 +- comparison/SML/fib-38.sml | 5 +++++ comparison/SML/nqueen-12.sml | 33 +++++++++++++++++++++++++++++++++ 3 files changed, 39 insertions(+), 1 deletion(-) create mode 100644 comparison/SML/fib-38.sml create mode 100644 comparison/SML/nqueen-12.sml (limited to 'comparison/SML') diff --git a/comparison/SML/Makefile b/comparison/SML/Makefile index 14dca02..5e89840 100644 --- a/comparison/SML/Makefile +++ b/comparison/SML/Makefile @@ -1,5 +1,5 @@ COMMAND = sml -TARGET = dummy.sml ack3-11.sml fib38.sml bsort-20000.sml isort-20000.sml qsort-260000.sml msort-260000.sml +TARGET = dummy.sml nqueen-12.sml ack3-11.sml fib-38.sml bsort-20000.sml isort-20000.sml qsort-260000.sml msort-260000.sml BENCHMARK = bash ../tools/sptest_scripts.sh LOG = log.txt diff --git a/comparison/SML/fib-38.sml b/comparison/SML/fib-38.sml new file mode 100644 index 0000000..504d4ac --- /dev/null +++ b/comparison/SML/fib-38.sml @@ -0,0 +1,5 @@ +fun fib 0 = 0 +| fib 1 = 1 +| fib n = (fib (n-1)) + (fib (n-2)); + +fib 38; diff --git a/comparison/SML/nqueen-12.sml b/comparison/SML/nqueen-12.sml new file mode 100644 index 0000000..9605312 --- /dev/null +++ b/comparison/SML/nqueen-12.sml @@ -0,0 +1,33 @@ +fun member x [] = false +| member x (y::ys) = if x=y then true else (member x ys); + +(* check for (0,q) and (k, qpos[col=k]) where k=1... +http://www.nct9.ne.jp/m_hiroi/func/haskell06.html + 0 1 2 --> + *------------- + 1| . . . . . . + 2| . . . -3. . 5 - 3 = 2 + 3| . . -2. . . 5 - 2 = 3 + 4| . -1. . . . 5 - 1 = 4 + 5| Q . . . . . Q position is 5 + 6| . +1. . . . 5 + 1 = 6 + 7| . . +2. . . 5 + 2 = 7 + 8| . . . +3. . 5 + 2 = 8 + *------------- +*) +fun threat k m [] = false + | threat k m (x::xs) = + if (k = x-m) orelse (k = m-x) then true + else (threat (k+1) m xs); + + +fun queen1 0 b n = [] + | queen1 m b n = + if (member m b) orelse (threat 1 m b) then (queen1 (m-1) b n) + else if (length b) = (n-1) then [m::b]@(queen1 (m-1) b n) + else (queen1 n (m::b) n) @ (queen1 (m-1) b n); + +fun queen n = queen1 n [] n; + +val n = 12; +length (queen n); -- cgit v1.2.3