Простой код пролога для мелкого списка integer [duplicate]

Имя метода конструктора имеет то же имя, что и класс. Кроме того, он не имеет типа возврата. Или, если вы это сделаете, сам метод конструктора не имеет имени, но тип возвращаемого типа - это тип класса.

  public class Foo {// Constructor public Foo () {} public void Bar (  ) {}}  
2
задан ДМИТРИЙ МАЛИКОВ 6 October 2014 в 19:48
поделиться

1 ответ

Подталкивание: вы находите индексы, но вы их не собираете.

indices(List, E, Is) :-
    indices_1(List, E, Is, 1).

Для пустого списка список индексов пуст, и элемент не имеет значения

indices_1([], _, [], _).

Если элемент похож на голову, соберите индекс.

indices_1([E|Xs], E, [I|Is], I) :-
    I1 is I + 1,
    indices_1(Xs, E, Is, I1).

Для этого требуется другое условие.

EDIT:

. Один из способов сделать это:

indices_1([X|Xs], E, Is, I) :- dif(X, E),
    I1 is I + 1,
    indices_1(Xs, E, Is, I1).

В предыдущем пункте глава списка и Элемент унифицированы. В этом пункте они явно различны. Это означает, что только одно из двух предложений может быть истинным для элемента списка в первом аргументе.

EDIT:

Другой способ сделать это - использовать findall и nth1:

indices(List, E, Is) :-
    findall(N, nth1(N, List, E), Is).
1
ответ дан user 16 August 2018 в 11:42
поделиться
  • 1
    Благодаря! Я добавил этот пункт: indices_1([_|T], E, Is, I) :- I1 is I + 1, indices_1(T, E, Is, I1). – Andrew Burgess 6 October 2014 в 20:52
  • 2
    Ваше решение только «возвращает» & quot; полный список (например, R = 1,3]), в то время как мой «возвращает» каждый шаг (например, R = [1,3]; R=[1]; R=[3], R=[]. Почему? – Andrew Burgess 6 October 2014 в 21:10
  • 3
    @AndrewBurgess Посмотреть мое редактирование – user 6 October 2014 в 21:30
  • 4
    Почему не использовать dif/2 вместо (\==)/2? Всегда есть какие-то уродливые случаи, скрывающиеся вокруг. – false 3 December 2014 в 14:24
  • 5
    @false Нет веской причины. Это предикат с таким количеством применений. – user 3 December 2014 в 21:15
Другие вопросы по тегам:

Похожие вопросы: