Можно ли получить эти адреса памяти в прологе GNU?

В основном я пытаюсь смоделировать разыменование C-указателя с помощью gnu-prolog.

Вот код:

пролог

:-foreign(fun(+integer,-integer)).

% p = &b;
testfun(Var, Val) :- fun(Val, Var).

main :-
A is 1,
testfun(A, P),
write(P),

C:

#include <gprolog.h>
#include <string.h>

PlBool fun(int ptr, int* res){
    *res = &ptr;                  // this is wrong
    if(res==NULL){
      return PL_FALSE;
    }else{
      return PL_TRUE;
    }
}

Так что в основном это неправильно, потому что ptr - это просто временная переменная в стеке, и ее память будет освобождена после вызова fun.

Итак, мой вопрос, возможно ли получить адреса памяти переменной в прологе gnu (например, в данном случае это адрес A, а не адрес ptr)?

1 ответ

Решение

Gnu Prolog довольно легко расширить, написав подпрограммы на C и связав их в исполняемый файл. но если вы пытаетесь "симулировать отношение к памяти", то я сомневаюсь, что взлом реальной функции адресации памяти будет полезен.

Вместо этого, как подсказывает @lurker, вы, вероятно, захотите "симулировать" архитектуру памяти / компьютера, а затем какой-то C-подобный язык, который "исполняется" на этом. Это звучит немного амбициозно, но об симуляции ЦП в Прологе уже спрашивали, а совсем недавно вы спрашивали здесь, с Ответом Люркера.

Другие вопросы по тегам