Пролог - применить аргументы с maplist - PullRequest
0 голосов
/ 23 февраля 2019

Я хотел бы понять, в чем может быть моя ошибка с этим фрагментом кода для пользовательского предиката для списка карт со списком списка:

generateProjection(TableOrTables/Selectors, Row, Result) :- 
    writeln(kiki),
    writeln(TableOrTables),
    writeln(Selectors),
    writeln(Row),
    Result = 1/2.

compute_projection(Rows, TableOrTables, Selectors, Result) :- 
    writeln(hello),
    writeln(Rows),
    writeln(Selectors),
    maplist(
        generateProjection(TableOrTables/Selectors),
        Rows,
        Result
    ).

Этот запрос работает:

generateProjection(foo/[foo/bar, foo/baz], [1, 2], Z).

тогда как этот провал:

compute_projection([[1, 2], [3, 4]], foo, [foo/bar, foo/baz], _4552/_4554).

Спасибо за вашу помощь

1 Ответ

0 голосов
/ 23 февраля 2019

Давайте посмотрим на ваш второй запрос:

?- compute_projection([[1,2],[3,4]], foo, [foo/bar,foo/baz], <b>_A/_B</b>).

maplist/3 относится к двум спискам .Теперь давайте снова посмотрим на определение предиката:

compute_projection(<i>Rows</i>, TableOrTables, Selectors, <b>Result</b>) :- 
    maplist(generateProjection(TableOrTables/Selectors),
            <i>Rows</i>,
            <b>Result</b>).

Итак, Result - это список, но для запроса требуется термин вида _/_.

. Поэтому ваш запрос не можетуспех.

...