【发布时间】:2019-05-20 03:07:44
【问题描述】:
我正在尝试在 Prolog 中进行与 IO 相关的练习,但发现使用字符串很困难。
任务是接受一个输入(整数 1
例如:
输入:180
输出:三倍 20、三倍 20、三倍 20
输入:96
输出:三19,双15,单9
我的问题是我收到错误消息:
"[一些我尝试过的谓词]:参数不够充分 实例化”。
我尝试的最后一件事是我在 StackOverflow Concatenation of Strings in Prolog 的另一个线程上找到的连接谓词。我觉得它看起来不错,但我仍然有同样的问题。请参阅下面的代码。
在我使用string_concat/3 之前。
main :-
repeat,
read(X),
(
X == end_of_file
;
integer(X),
dart_scores(X,N),
write(N),
fail
).
dart_scores(X,N) :-
concatenate([A1,B1,C1],N),
concatenate(["single", A], A1),
concatenate(["double", B], B1),
concatenate(["triple", C], C1),
find_values(X,A,B,C).
find_values(X,A,B,C) :-
X is A+B*2+C*3,
in_domain(A),
in_domain(B),
in_domain(C).
in_domain(D) :-
integer(D),
D>=1,
20>=D.
concatenate(StringList, StringResult) :-
maplist(atom_chars, StringList, Lists),
append(Lists, List),
atom_chars(StringResult, List).
【问题讨论】: