Как мне изменить запись в эрланге? - PullRequest
7 голосов
/ 26 апреля 2010

I, чтобы изменить значения {place} и {other_place} в записи операции.

#op{
    action   = [walk, from, {place}, to, {other_place}],
    preconds = [[at, {place}, me], [on, floor, me], 
                [other_place, {place}, {other_place}]],
    add_list = [[at, {other_place}, me]],
    del_list = [[at, {place}, me]]
}

Но erlang не позволяет изменять переменные. Для этого есть тип данных?

1 Ответ

20 голосов
/ 27 апреля 2010

erlang не позволяет вам изменять переменные, это правда. Но ничто не мешает вам создавать модифицированные копии переменной.

Учитывая вашу запись:

Rec = #op{
    action   = [walk, from, {place}, to, {other_place}],
    preconds = [[at, {place}, me], [on, floor, me], 
                [other_place, {place}, {other_place}]],
    add_list = [[at, {other_place}, me]],
    del_list = [[at, {place}, me]]
}

Вы можете получить модифицированную версию, например, так:

%% replaces the action field in Rec2 but everything else is the same as Rec.
Rec2 = Rec#op{action = [walk, from, {new_place}, to, {new_other_place}]}

Это выполнит то, о чем вы, кажется, спрашиваете.

...