Пролог: вложенный список - PullRequest
       7

Пролог: вложенный список

2 голосов
/ 15 февраля 2011

У меня есть этот код Пролога:

pick_number_simple([],[]).
pick_number_simple([H|T],[H|T2]):- 
    number(H), pick_number_simple(T,T2).
pick_number_simple([H|T],T2):-
    not(number(H)), pick_number_simple(T,T2).

, который получает номера из списка. Например:

pick_number_simple([d,f,7,5,e,3,g], NumList)

дает вам:

[7,5,3]

Но я хочу, чтобы он получал номера из вложенного списка.

Например:

pick_numbers_general([a,b,1,[2,[c,3]],d],1,NumList)

даст вам:

[2,3]

как мне это сделать?

1 Ответ

1 голос
/ 15 февраля 2011

U может использовать flatten / 2 предиката

pick_number_simple([],[]).
pick_number_simple([H|T],[H|T2]):- 
    number(H), pick_number_simple(T,T2).
pick_number_simple([H|T],T2):-
    not(number(H)), pick_number_simple(T,T2).

pick_numbers_general(List, Num, NumList) :-
    flatten(List, NestList),
    pick_number_simple(NestList, NumListAll),
    findall(X, (member(X, NumListAll),X > Num), NumList).

То есть

?- pick_numbers_general([a,b,1,[2,[c,3]],d],1,NumList).
NumList = [2, 3] ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...