aboutsummaryrefslogtreecommitdiff
path: root/comparison/SML
diff options
context:
space:
mode:
authorShinya Sato <shinnya.sato@gmail.com>2022-08-28 20:40:57 +0900
committerShinya Sato <shinnya.sato@gmail.com>2022-08-28 20:40:57 +0900
commit02a84743ddf5c8c27a36c4d5a20eaf3cd2a9aff4 (patch)
tree8bb368481caaa87f281358bb746edcc881b7e54c /comparison/SML
parent3547d92c3601f8c6c295636cd2394b1d85c31bc1 (diff)
downloadinpla-02a84743ddf5c8c27a36c4d5a20eaf3cd2a9aff4.tar.gz
inpla-02a84743ddf5c8c27a36c4d5a20eaf3cd2a9aff4.zip
Update for n-queens
Diffstat (limited to '')
-rw-r--r--comparison/SML/Makefile2
-rw-r--r--comparison/SML/fib-38.sml5
-rw-r--r--comparison/SML/nqueen-12.sml33
3 files changed, 39 insertions, 1 deletions
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);