Libraryless. Compilation Failed (1836L/12K).
1 | !747 |
2 | |
3 | m { |
4 | static S inputID = "#1001191"; |
5 | static S input; |
6 | static S engineID = "#1001192"; |
7 | static Class engine; // logic engine |
8 | static int score, total; |
9 | |
10 | !include #1001196 // Lisp engine |
11 | |
12 | p { |
13 | if (input == null) |
14 | input = loadSnippet(inputID); // Images & pixels |
15 | else |
16 | inputID = "direct"; |
17 | |
18 | Lisp list = lisplist(); |
19 | for (S line : toLinesFullTrim(input)) { |
20 | if (line.equals("**")) { |
21 | testCase(list); |
22 | list = lisplist(); |
23 | } else if (line.startsWith("!")) { |
24 | line = line.substring(1).trim(); |
25 | Lisp l; |
26 | if (line.indexOf('|') >= 0) { |
27 | l = or(); |
28 | for (S x : line.split("\\|")) |
29 | l.add(x.trim()); |
30 | } else |
31 | l = new Lisp(line); |
32 | list.add(answer(l)); |
33 | } else { |
34 | if (line.startsWith("?")) |
35 | line = line.substring(1).trim(); |
36 | list.add(enter(line)); |
37 | } |
38 | } |
39 | |
40 | testCase(list); |
41 | |
42 | print("Score for " + engineID + " on " + inputID + ": " + score + " / " + total + "."); |
43 | } |
44 | |
45 | static void testCase(Lisp list) { |
46 | if (list.isEmpty()) return; |
47 | |
48 | if (engine == null) { |
49 | engine = hotwire(engineID); |
50 | callOpt(engine, "init"); |
51 | } |
52 | |
53 | for (int i = 0; i < list.size(); i++) { |
54 | Lisp a = list.get(i); |
55 | if (!a.is("answer")) continue; |
56 | print("Expected: " + a); |
57 | S answer = checkEngine(list.subList(0, i)); |
58 | boolean ok = isAnswerOK(a.get(0), answer); |
59 | ++total; |
60 | if (ok) ++score; |
61 | print(ok ? "OK!" : "Not OK..."); |
62 | } |
63 | } |
64 | |
65 | static boolean isAnswerOK(Lisp a, S answer) { |
66 | if (answer == null) return false; |
67 | if (a.is("or")) { |
68 | for (Lisp s : a) |
69 | if (sentenceEq(s.head, answer)) |
70 | return true; |
71 | return false; |
72 | } else |
73 | return sentenceEq(a.head, answer); |
74 | } |
75 | |
76 | static S checkEngine(Lisp list) { |
77 | O exportedList = export(list, engine); |
78 | //print("exportedList: " + structure(exportedList)); |
79 | S answer = (S) call(engine, "chimeIn", exportedList); |
80 | print("Engine said: " + answer); |
81 | return answer; |
82 | } |
83 | |
84 | static O export(O o, Class dest) ctex { |
85 | if (o == null || o instanceof String || o instanceof Number) return o; |
86 | |
87 | if (o instanceof List) { |
88 | List l = cast o; |
89 | List destO = new ArrayList(l.size()); |
90 | for (int i = 0; i < l.size(); i++) |
91 | destO.add(export(l.get(i), dest)); |
92 | return destO; |
93 | } |
94 | |
95 | if (o instanceof Lisp) { |
96 | Class destClass = dest.getClassLoader().loadClass(o.getClass().getName()); |
97 | //print(o.getClass() + " => " + destClass); |
98 | |
99 | if (o.getClass() == destClass) |
100 | return o; // no export necessary |
101 | |
102 | // actually make a new object, copy fields |
103 | |
104 | O destO = nuObject(destClass); |
105 | |
106 | // TODO: go to superclasses too |
107 | Field[] fields = o.getClass().getDeclaredFields(); |
108 | for (Field field : fields) { |
109 | if ((field.getModifiers() & Modifier.STATIC) != 0) |
110 | continue; |
111 | field.setAccessible(true); |
112 | Object value = field.get(o); |
113 | setOpt(destO, field.getName(), export(value, dest)); |
114 | } |
115 | |
116 | return destO; |
117 | } |
118 | |
119 | throw fail(o.getClass()); |
120 | } |
121 | } |
download show line numbers debug dex old transpilations
Travelled to 16 computer(s): aoiabmzegqzx, bhatertpkbcr, cbybwowwnfue, cfunsshuasjs, dhtvkmknsjym, gwrvuhgaqvyk, ishqpsrjomds, lpdgvwnxivlt, mqqgnosmbjvj, onxytkatvevr, pyentgdyhuwx, pzhvpgtvlbxg, teubizvjbppd, tslmcundralx, tvejysmllsmz, vouqrxazstgt
No comments. add comment
Snippet ID: | #1001195 |
Snippet name: | Lisp/NL logic engine tester (developing) |
Eternal ID of this version: | #1001195/1 |
Text MD5: | 38093e81c814ac9390a22dd75079425b |
Transpilation MD5: | 5c427601ea2aa87fb4b40563b512c273 |
Author: | stefan |
Category: | logic code |
Type: | JavaX source code |
Public (visible to everyone): | Yes |
Archived (hidden from active list): | No |
Created/modified: | 2016-04-17 22:14:15 |
Source code size: | 3308 bytes / 121 lines |
Pitched / IR pitched: | No / No |
Views / Downloads: | 658 / 712 |
Referenced in: | [show references] |