如何访问 Prolog 列表中的元素?
How to access an element in a list in Proplog?
在 prolog 中,如何使用索引访问列表中的元素?例如,我正在编写一个规则 get_i(List, I, X),其中 List 是我传入的列表,I 是索引,X 是将要返回的元素。示例 运行 可能类似于:getget_i([a,b,c,d], 3, X).
输出将是 c
谢谢
您从 apropos(element)
和 apropos(index)
开始,浏览有趣且相关的谓词:
然后你请求 help(element/3)
来查看第一个的帮助并得到:
第 n 个元素很好,但是有限域变量听起来很复杂,它是某个奇怪库的一部分。回到第一个视图,向集合中插入元素,从有序集合中删除,结束 HTML 东西,不,不,FD 设置东西,挂钩东西,ANSI 东西,不,域,html, 不...
nth0/4 select/insert element at index.
通过 help(nth0/4)
获得帮助并查看:
“当 Elem 是 List 的第 N 个(从 0 开始)元素时为真”。这是相关的,示例显示 I
按位置与列表中的项目相关。以及“列表”库的一部分。有用。
因为我已经知道我在寻找 nth0 或 nth1,所以这完全是人为的,但是 apropos 非常有用,这比“Google 它”的答案更有趣。
假设练习的重点是找出如何找到列表的第 n 个元素...
简单的方法是这样的,其中列表的第零个元素是列表的头部,你只需递归地丢弃列表的头部并递减 N
直到 N
达到 0.
nth( [H|_] , 0 , H ) .
nth( [_|T] , N , H ) :- N > 0, N1 is N-1, nth(T,N1,H).
但这不允许您以不同的方式调用它:
nth([a,b,c,d,e],N,d).
失败。
nth([a,b,c,d,e],N,X).
失败。
不过,正确地做事并不复杂:
nth( L , N , H ) :- nth(L,0,N,H) .
nth( [H|_] , N , N , H ) .
nth( [_|T] , M , N , H ) :- var(N) , M1 is M+1 , nth(T,M1,N,H) .
nth( [_|T] , M , N , H ) :- integer(N) , M < N , M1 is M+1 , nth(T,M1,N,H) .
现在nth([a,b,c,d,e],N,X)
会反复回溯成功
N = 0, X = a
N = 1, X = b
N = 2, X = c
N = 3, X = d
N = 4, X = E
和nth([a,b,c,d,e],N,d)
产生
N = 3
在 prolog 中,如何使用索引访问列表中的元素?例如,我正在编写一个规则 get_i(List, I, X),其中 List 是我传入的列表,I 是索引,X 是将要返回的元素。示例 运行 可能类似于:getget_i([a,b,c,d], 3, X).
输出将是 c
谢谢
您从 apropos(element)
和 apropos(index)
开始,浏览有趣且相关的谓词:
然后你请求 help(element/3)
来查看第一个的帮助并得到:
第 n 个元素很好,但是有限域变量听起来很复杂,它是某个奇怪库的一部分。回到第一个视图,向集合中插入元素,从有序集合中删除,结束 HTML 东西,不,不,FD 设置东西,挂钩东西,ANSI 东西,不,域,html, 不...
nth0/4 select/insert element at index.
通过 help(nth0/4)
获得帮助并查看:
“当 Elem 是 List 的第 N 个(从 0 开始)元素时为真”。这是相关的,示例显示 I
按位置与列表中的项目相关。以及“列表”库的一部分。有用。
因为我已经知道我在寻找 nth0 或 nth1,所以这完全是人为的,但是 apropos 非常有用,这比“Google 它”的答案更有趣。
假设练习的重点是找出如何找到列表的第 n 个元素...
简单的方法是这样的,其中列表的第零个元素是列表的头部,你只需递归地丢弃列表的头部并递减 N
直到 N
达到 0.
nth( [H|_] , 0 , H ) .
nth( [_|T] , N , H ) :- N > 0, N1 is N-1, nth(T,N1,H).
但这不允许您以不同的方式调用它:
nth([a,b,c,d,e],N,d).
失败。nth([a,b,c,d,e],N,X).
失败。
不过,正确地做事并不复杂:
nth( L , N , H ) :- nth(L,0,N,H) .
nth( [H|_] , N , N , H ) .
nth( [_|T] , M , N , H ) :- var(N) , M1 is M+1 , nth(T,M1,N,H) .
nth( [_|T] , M , N , H ) :- integer(N) , M < N , M1 is M+1 , nth(T,M1,N,H) .
现在nth([a,b,c,d,e],N,X)
会反复回溯成功
N = 0, X = a
N = 1, X = b
N = 2, X = c
N = 3, X = d
N = 4, X = E
和nth([a,b,c,d,e],N,d)
产生
N = 3