我有一个脚本来解决sudoku问题,但是我应该读取这种格式的文件。
1. 3. 5.
1. 4. 3.
1. 6. 6.
1. 7. 7.
2. 2. 9.
2. 5. 7.
2. 8. 1.
3. 1. 6.
3. 4. 1.
3. 6. 2.
3. 9. 5.
4. 1. 4.
4. 3. 9.
4. 7. 8.
4. 9. 3.
5. 2. 5.
5. 8. 6.
6. 1. 7.
6. 3. 6.
6. 7. 9.
6. 9. 1.
7. 1. 5.
7. 4. 7.
7. 6. 9.
7. 9. 8.
8. 2. 3.
8. 5. 2.
8. 8. 9.
9. 3. 1.
9. 4. 8.
9. 6. 3.
9. 7. 4.我的剧本被医护人员
suduko(A1,A2,A3,A4,A5,A6,A7,A8,A9,
B1,B2,B3,B4,B5,B6,B7,B8,B9,
C1,C2,C3,C4,C5,C6,C7,C8,C9,
D1,D2,D3,D4,D5,D6,D7,D8,D9,
E1,E2,E3,E4,E5,E6,E7,E8,E9,
F1,F2,F3,F4,F5,F6,F7,F8,F9,
G1,G2,G3,G4,G5,G6,G7,G8,G9,
H1,H2,H3,H4,H5,H6,H7,H8,H9,
I1,I2,I3,I4,I5,I6,I7,I8,I9)我应该用文件中的值替换其中的一些,例如这里的A3= 5和A4 =3
我不知道如何读取这个文件并在代码中使用变量。
谢谢
发布于 2016-01-03 08:17:02
在保存了一个名为“sudoku.txt”的文件后,read_ file /2将生成所需的参数列表,然后使用univ (=..)要连接函子(谓词名)和参数:
?- Pred = suduko(
A1,A2,A3,A4,A5,A6,A7,A8,A9,
B1,B2,B3,B4,B5,B6,B7,B8,B9,
C1,C2,C3,C4,C5,C6,C7,C8,C9,
D1,D2,D3,D4,D5,D6,D7,D8,D9,
E1,E2,E3,E4,E5,E6,E7,E8,E9,
F1,F2,F3,F4,F5,F6,F7,F8,F9,
G1,G2,G3,G4,G5,G6,G7,G8,G9,
H1,H2,H3,H4,H5,H6,H7,H8,H9,
I1,I2,I3,I4,I5,I6,I7,I8,I9),
Pred =.. [_|B], read_file('sudoku.txt', B), call(Pred).
read_digit(Stream, Digit) :-
read(Stream, Digit), integer(Digit), Digit >= 1, Digit =< 9.
read_cell(Stream, Matrix) :-
read_digit(Stream, RowIx),
read_digit(Stream, ColIx),
read_digit(Stream, Val),
CellIx is (RowIx-1)*9 + ColIx,
nth1(CellIx, Matrix, Val),
!, read_cell(Stream, Matrix).
read_cell(_Stream, _Matrix).
read_file(Path, Bindings) :-
open(Path, read, Stream),
read_cell(Stream, Bindings),
close(Stream).
% test
read_file :- read_file('sudoku.txt', B), write(B), nl.https://stackoverflow.com/questions/34568335
复制相似问题