PHP «Предупреждение: недопустимый тип смещения в…» проблемы с массивом поставили меня в тупик

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

Warning: Illegal offset type in <file location>\example.php on line 12
Warning: Illegal offset type in <file location>\example.php on line 16

Они относятся к двум строкам, содержащим ссылку на «$ questions [$ question]».

В настоящее время я участвую в проекте по разработке приложения, способного рассматривать набор узлов и соединений и находить кратчайший путь (распространенная и хорошо известная проблема) между двумя узлами (при разрешенных соединениях). Что ж, мне действительно не нужно создавать приложение с нуля, мне просто нужно «преобразовать» уже существующее приложение Prolog в f #. Я подумал, что немного об этом подумал и, наконец, задал себе один вопрос: «Вместо разработки специального решения и реализации новых алгоритмов, специально привязанных к этой проблеме, могу ли я создать программу, способную принимать факты, такие как Пролог, и использовать их для создания запросов или чего-то еще. подобное? ".

Поступая так, я бы создал набор фактов (как в Прологе), а затем использовал бы их для создания запросов. Итак, учитывая теперь эту новую проблему (преобразование Пролога в F #), мне нужно найти способ создавать факты, подобные этим:

myfact1(el1, el2,..., eln).
myfact2(el1, el2,..., elm).
...
myfactk(el1, el2,..., elp).

, для чего-то с похожим синтаксисом, например:

fact factname1: el1 el2 ... eln;
fact factname2: el1 el2 ... elm;
...
fact factnamek: el1 el2 ... elp;

Я знаю, что F # очень хорошо подходит для синтаксического анализа, поэтому Я думаю, что разбор этого, вероятно, не будет проблемой.

Хорошо! Теперь, когда он проанализирован, я должен определить алгоритм, который при синтаксическом анализе кода сохраняет все факты в виде какого-то знания (не более чем таблицы). Для создания всех необходимых ассоциаций.

Например, решением может быть хеш-таблица, которая учитывает все ассоциации

factname1 -> el1
factname1 -> el2
...
factname1 -> eln
factname2 -> el1
factnale2 -> el2
...
factname2 -> elm
factname3 -> el1
...
...
factnamek -> el1
factnamek -> el2
...
factnamek -> elp

Поступая таким образом, я всегда смогу решать запросы. Например, рассмотрим следующий факт Пролога

mother(A, B) % This means that A is mother of B
mother(C, D)

В F # я создаю

мать факта: AB; факт мать: CD;

Моя хеш-таблица:

мать -> A | B мать -> С | D

Первый столбец - это имя факта, а второй - значение (здесь кортеж).

Если я хочу выполнить поиск: "кто мать B" -> я ищу мать и смотрю для значения я нахожу B, смотрю в кортеж и нахожу A!

Ну, похоже, работает. Но факты легко реализовать. А как насчет правил? Например, родители правила:

parents(A, B, C) :- mother(A, C), father (B, C)

В F # использовать мой синтаксис? Что ж, мне в голову пришла такая идея:

rule parents: A, B, C => mother A C and father B C

Когда мой синтаксический анализатор обнаруживает правило, что он должен делать? Я хотел бы создать какую-то запись в таблице, как это сделал я, и иметь возможность позже делать запросы, чтобы указать предмет и получить его родителей или указать отца и получить всех сыновей и так далее ... Что бы вы сделали?

6
задан Andry 17 December 2010 в 23:30
поделиться