我必须填写长度为n位的列表。 我知道n-1的范围是1到9,一位数可以是1到99。 我是这样做的:
generate([First|Next],Czynniki):-
between(1,99,First),
generate2(Next).
generate2(Next):-
sublist([1,2,3,4,5,6,7,8,9],Next).
sublist([],[]).
sublist([H|T],[H|S]):-
sublist(T,S).
sublist([_|T],S):-
sublist(T,S).
这样做我生成了一些相同的解决方案。 也许您已经知道如何在不重复的情况下生成列表?
为了清楚起见,我(@repeat)在OP中添加了以下相关评论:
在入口处我有未定义变量的长度
N
列表。并希望填写我的列表:N-1
区间1-9
和1-99
范围内的一个数字。示例:N = 5,L = [56,2,3,4,8] ......
答案 0 :(得分:1)
使用clpfd!
from oauth2client.client import GoogleCredentials
credentials = GoogleCredentials.get_application_default()
http = credentials.authorize(httplib2.Http())
让我们像这样定义:- use_module(library(clpfd)).
:
digits10plusdigit100_n/2
示例查询:
digits10plusdigit100_n(Zs,N) :-
Zs = [CentDigit|DecDigits],
length(Zs,N),
CentDigit in 1..99,
DecDigits ins 1..9,
labeling([],Zs).
答案 1 :(得分:0)
可能更改为between(10,99,X)
所以反转你的谓词,生成小于10的数字,然后生成最后一个变量,大于10
答案 2 :(得分:0)
这不仅仅是here ?
中@false非常优雅的变体gen(Xs) :-
between(1, 9, L),
length(Xs, L),
maplist(between(1,99), Xs).
?- gen(Xs).
Xs = [1] ;
Xs = [2] ;
Xs = [3] ;
Xs = [4] ;
Xs = [5] ;
..
Xs = [99] ;
Xs = [1, 1] ;
Xs = [1, 2] ;
Xs = [1, 3] ;
Xs = [1, 4] ;
..
Xs = [1, 98] ;
Xs = [1, 99] ;
Xs = [2, 1] ;
Xs = [2, 2] ;
Xs = [2, 3] ;
Xs = [2, 4] ;
Xs = [2, 5] ;
Xs = [2, 6] ;