将prolog中的列表拆分为原子和整数



我是新的序言,并试图使谓词分离到原子和整数列表,但我一直在尝试不同的方式一段时间了,但没有在哪里有一个关于如何做到这一点的例子。对我来说,这似乎是一个基本的事情,要知道在proleg,但没有例子,我可以找到如何做到这一点。

如:独立([3 t 8 l 0, 5 g, 2],原子,整数)。

原子= [a,g,l,t],整数= [0,2,5,3,8]

在swi-prolog中,使用partition/4:

separate(List, Atoms, Integers):-
partition(integer, List, Integers, Atoms).

假设列表中的每一项要么是整数要么是原子

示例运行:

?- separate([3,t,8,l,0,a,5,g,2],Atoms,Integers).
Atoms = [t, l, a, g],
Integers = [3, 8, 0, 5, 2].

特别是如果你正在学习,滚你自己的。这也允许您处理边缘情况。例如,它简单地抛弃了原子和整数以外的东西:

atoms_and_ints( []     , []        , []       ) .   % The empty list doesn't have any atoms or ints.
atoms_and_ints( [X|Xs] , [X|Atoms] , Ints     ) :-  % For a non-empty list,
atom(X),                                          % - is the head an atom?
!,                                                % - eliminate the choice point
atoms_and_ints(Xs,Atoms,Ints).                    % - add it to the atoms and recurse down.
atoms_and_ints( [X|Xs] ,    Atoms  , [X|Ints] ) :-  % Similarly,
integer(X),                                       % - is the head an integer?
!,                                                % - eliminate the choice point
atoms_and_ints(Xs,Atoms,Ints).                    % - if so, add it to the Ints and recurse down.
atoms_and_ints( [_|Xs], Atoms, Ints ) :-            % If the head of the list is something else...
atoms_and_ints(Xs,Atoms,Ints).                    % - discard it and recurse down.

相关内容

  • 没有找到相关文章

最新更新