Я нахожусь в процессе изучения Пролога, и у меня есть проблемы с приближением к языку, исходящему из объектно-ориентированного фона.
Я пытаюсь выполнить следующие инструкции:
Внедрите поэтапную очередь. Это структура, состоящая из двух списков: передняя часть и задняя часть, представленные как
queue(Front, Back)
. Очередь пуста, если и только если оба списка пусты. Если элементы добавляются в очередь, они добавляются в серверную часть; если они удаляются, они удаляются с передней части; если передняя часть становится пустой (а задняя часть не пуста), тогда задняя часть становится новой передней частью с[]
в качестве новой задней части. Например, мы могли бы начать с такой очереди, какqueue([2,5,7], [])
, добавление 8 дает намqueue([2,5,7], [8])
, удаление двух элементов даетqueue([7], [8])
, добавление 9 даетqueue([7], [9,8])
, а удаление элемента даетqueue([9,8], [])
.
Я не понимаю, как я создаю и затем ссылаюсь на структуру очереди в файле .pl
таким образом, чтобы другие предикаты могли затем манипулировать и преобразовывать
Я примерно набросал то, что, по моему мнению, я должен делать, как определенную структуру очереди, так и просто список списков.
add_to_q(X, [[H|T]|[H2|T2]], [[H|T]|[X|[H2|T2]]).
queue(X, Y)
add_to_q(A, queue(X,Y), queue(X, [A|Y]). % gives Syntax error: Operator expected
------------------
remove_from_q( [[H | [T|T3]] | [H2|T2]], [[T|T3]] | [H2|T2]]).
queue(X, Y)
remove_from_q( queue(X,[H|T]), queue(H,T).
Как мне определить и работать со структурой в Прологе, как я могу добавить то, что будет в объектно-ориентированном языке методы, такие как getHead
или getTail
, я видел примеры того, как вы могли бы сделать это с помощью только списков но я работаю не со списком списков, а с «очередью» из двух отдельных списков?
Чувствовать себя потерянным!
[9,8]
идет от конца к началу без реверсирования, похоже, не делает это очередью. - person Enigmativity   schedule 01.03.2020funny queue
. - person Guy Coder   schedule 01.03.2020queue([7], [9,8])
должно датьqueue([8,9], [])
, чтобы сохранить свойство FIFO. они забыли обратить его. - person Will Ness   schedule 01.03.2020