Лучший способ напечатать массив / список в прологе без запятых, скобок или пробелов? - PullRequest
0 голосов
/ 05 июня 2019

Так что я только начинаю и дурачусь с прологом.

Предположим, у меня есть список чисел как таковой:

X = [0,1,0,1,1,1,1,0]

и я хочу вывести эти числа на экран беззапятые, интервалы или переводы строк, например:

?- write(X).
01011110

До сих пор я пытался использовать write (X).который просто печатает массив, и я дурачился с print_term, используя модуль pprint, но не имел никакого успеха.

Сейчас у меня есть метод для создания сетки из 0 и 1 как таковой:

grid(0,[]).
grid(X,Y) :-
    X > 0, 
    X1 is X-1,
    random(0, 2, U),
    Y = [U|T],
    grid(X1,T).

Вышеуказанный метод работает, как и предполагалось, только не получая желаемый результат при печати.Если это что-то изменит, я намерен в конечном итоге превратить это в двумерную сетку.

1 Ответ

3 голосов
/ 05 июня 2019

Предполагая, что все элементы на входе действительно являются числами (или атомами), вы можете использовать встроенный предикат atomic_list_concat / 2 :

?- X = [0,1,0,1,1,1,1,0], atomic_list_concat(X,Y), write(Y).
01011110

Если бы это была матрица, представленная в виде списка списков, вы могли бы сделать что-то вроде этого:

print_matrix([]).
print_matrix([Row|Rows]):-
  atomic_list_concat(Row, TRow),
  writeln(TRow),
  print_matrix(Rows).

образец теста:

?- print_matrix([[1,0,0,1], [0,1,1,0]]).
1001
0110
...