LINUX.ORG.RU

История изменений

Исправление gloomdemon, (текущая версия) :

емнип, он выводит в том порядке, в котором иноды записаны в «файле-директории».

Пример с find немного не удачный =). find по факту детерминированный поэтому там вариантов не будет никаких. Просто мы разговаривали о функциях milti и поэтому я написал пример выше как если бы find был multi и выбирал не из инод, т.е.:

:- pred find(string::out) is multi.
find("dir1").
find("dir2").
find("dir3").

и есть, к примеру, два варианта вызова

1) solutions(find, Dirs) и Dirs всегда будет списком [«dir1», «dir2», «dir3»]

2)

do_while(find, check, [], Dirs)

:- pred check(string::in, bool:out, list(string)::in, list(string)::out) is det.

check(Dir, Next, Dirs0, Dirs) :- Next = yes, Dirs = [Dir | Dirs0].

Типа термин ordered - хранения, sorted - для отдачи?

Хм, чет опять не то. Еще раз, есть list, он же всегда ordered, потому что элементы в list'е находятся в определенном порядке, у них есть позиция. Но в случае с предикатом типа multi и unsorted_solutions у тебя в списке элементы будут находится в том порядке в каком тебе возвращает решения этот самый предикат, а предикат типа multi может их возвращать в любом порядке. Поэтому unsorted_solutions и имеет тип cc_multi, потому как вариантов комбинации решений может быть много [«dir1», «dir3», «dir2»], [«dir2», «dir3», «dir1»] и т.д. (это все разные списки), но выберут и вернут только один из этих вариантов. А просто solutions собирает все решения предиката multi, сортирует, убирает дубликаты и возвращает один и тот же результат, т.е. что-то типа [«dir1», «dir2», «dir3»].

Где там про обход багов?

Прям там и нет. Но надо просто рассылку разработчиков читать переодически, вот к примеру, хотя бы http://www.mercurylang.org/list-archives/developers/2001-March/011835.html, http://www.mercurylang.org/list-archives/developers/2007-January/014604.html .

Для меня (и я так понимаю для разработчиков тоже) есть две ситуации зачем в логическом языке запрещать во _всех_ конъюнкциях и дизъюнкциях менять местами независимые выражения:

1) ураганный ***** код в стиле D \= 0, R = Num / D, когда нужно что-бы во всем модуле ни в коем случае не поменялось ничего местами;

2) баг или особенности (изменения) оптимизатора какого нибудь компилятора mercury с наложением на ошибку в коде, поэтому авторы и пишут «ease of programming and portability» и поэтому засунули эти ключи в стандарт, и расписали последовательность миниальной перестановки и выполнения кода, так сказать, позаботились о несчастных программистах.

С радостью приму дополнения к этим пунктам =), но чет не вижу других вариантов зачем нужна такая возможность.

Исправление gloomdemon, :

емнип, он выводит в том порядке, в котором иноды записаны в «файле-директории».

Пример с find немного не удачный =). find по факту детерминированный поэтому там вариантов не будет никаких. Просто мы разговаривали о функциях milti и поэтому я написал пример выше как если бы find был multi и выбирал не из инод, т.е.:

:- pred find(string::out) is multi.
find("dir1").
find("dir2").
find("dir3").

и есть, к примеру, два варианта вызова

1) solutions(find, Dirs) и Dirs всегда будет списком [«dir1», «dir2», «dir3»]

2)

do_while(find, check, [], Dirs)

:- pred check(string::in, bool:out, list(string)::in, list(string)::out) is det.

check(Dir, Next, Dirs0, Dirs) :- Next = yes, Dirs = [Dir | Dirs0].

Типа термин ordered - хранения, sorted - для отдачи?

Хм, чет опять не то. Еще раз, есть list, он же всегда ordered, потому что элементы в list'е находятся в определенном порядке, у них есть позиция. Но в случае с предикатом типа multi и unsorted_solutions у тебя в списке элементы будут находится в том порядке в каком тебе возвращает решения этот самый предикат, а предикат типа multi может их возвращать в любом порядке. Поэтому unsorted_solutions и имеет тип cc_multi, потому как вариантов комбинации решений может быть много [«dir1», «dir3», «dir2»], [«dir2», «dir3», «dir1»] и т.д. (это все разные списки), но выберут и вернут только один из этих вариантов. А просто solutions собирает все решения предиката multi, сортирует, убирает дубликаты и возвращает один и тот же результат, т.е. что-то типа [«dir1», «dir2», «dir3»].

Где там про обход багов?

Прям там и нет. Но надо просто рассылку разработчиков читать переодически, вот к примеру, хотя бы http://www.mercurylang.org/list-archives/developers/2001-March/011835.html, http://www.mercurylang.org/list-archives/developers/2007-January/014604.html .

Для меня (и я так понимаю для разработчиков тоже) есть две ситуации зачем в логическом языке запрещать во _всех_ конъюнкциях и дизъюнкциях менять местами независимые выражения:

1) ураганный ***** код в стиле D \= 0, R = Num / D, когда нужно что-бы во всем модуле ни в коем случае не поменялось ничего местами;

2) баг или особенности (изменения) оптимизатора какого нибудь компилятора mercury с наложением на ошибку в коде, поэтому авторы и пишут «ease of programming and portability» и поэтому засунули эти ключи в стандарт, и расписали последовательность миниальной перестановки и выполнения кода, так сказать, позаботились о несчастных программистах.

С радостью приму дополнения к этим пунктам =)

Исправление gloomdemon, :

емнип, он выводит в том порядке, в котором иноды записаны в «файле-директории».

Пример с find немного не удачный =). find по факту детерминированный поэтому там вариантов не будет никаких. Просто мы разговаривали о функциях milti и поэтому я написал пример выше как если бы find был multi и выбирал не из инод, т.е.:

:- pred find(string::out) is multi.
find("dir1").
find("dir2").
find("dir3").

и есть, к примеру, два варианта вызова

1) solutions(find, Dirs) и Dirs всегда будет списком [«dir1», «dir2», «dir3»]

2)

do_while(find, check, [], Dirs)

:- pred check(string::in, bool:out, list(string)::in, list(string)::out) is det.

check(Dir, Next, Dirs0, Dirs) :- Next = yes, Dirs = [Dir | Dirs0].

Типа термин ordered - хранения, sorted - для отдачи?

Хм, чет опять не то. Еще раз, есть list, он же всегда ordered, потому что элементы в list'е находятся в определенном порядке, у них есть позиция. Но в случае с предикатом типа multi и unsorted_solutions у тебя в списке элементы будут находится в том порядке в каком тебе возвращает решения этот самый предикат, а предикат типа multi может их возвращать в любом порядке. Поэтому unsorted_solutions и имеет тип cc_multi, потому как вариантов комбинации решений может быть много [«dir1», «dir3», «dir2»], [«dir2», «dir3», «dir1»] и т.д. (это все разные списки), но выберут и вернут только один из этих вариантов. А просто solutions собирает все решения предиката multi, сортирует, убирает дубликаты и возвращает один и тот же результат, т.е. что-то типа [«dir1», «dir2», «dir3»].

Где там про обход багов?

Прям там и нет. Но надо просто рассылку разработчиков читать переодически, вот к примеру, хотя бы http://www.mercurylang.org/list-archives/developers/2001-March/011835.html, http://www.mercurylang.org/list-archives/developers/2007-January/014604.html .

Для меня (и я так понимаю для разработчиков тоже) есть две ситуации зачем в логическом языке запрещать во _всех_ конъюнкциях и дизъюнкциях менять местами независимые выражения:

1) ураганный ***** код в стиле D \= 0, R = Num / D, когда нужно что-бы во всем модуле ни в коем случае не поменялось ничего местами;

2) баг или особенности (изменения) оптимизатора какого нибудь компилятора mercury с наложением на ошибку в коде, поэтому авторы и пишут «ease of programming and portability» и поэтому засунули эти ключи в стандарт и расписали последовательность миниальной перестановки и выполнения кода, так сказать, позаботились о несчастных программистах.

С радостью приму дополнения к этим пунктам =)

Исходная версия gloomdemon, :

емнип, он выводит в том порядке, в котором иноды записаны в «файле-директории».

Пример с find немного не удачный =). find по факту детерминированный поэтому там вариантов не будет никаких. Просто мы разговаривали о функциях milti и поэтому я написал пример выше как если бы find был multi и выбирал не из инод, т.е.:

:- pred find(string::out) is multi.
find("dir1").
find("dir2").
find("dir3").

и есть, к примеру, два варианта вызова

1) solutions(find, Dirs) и Dirs всегда будет списком [«dir1», «dir2», «dir3»]

2)

do_while(pred(out) is multi, pred(in, out, in, out) is det, in, out) pred do_while(pred(T), pred(T, bool, T2, T2), T2, T2).

do_while(find, check, [], Dirs)

:- pred check(string::in, bool:out, list(string)::in, list(string)::out) is det.

check(Dir, Next, Dirs0, Dirs) :- Next = yes, Dirs = [Dir | Dirs0].

Типа термин ordered - хранения, sorted - для отдачи?

Хм, чет опять не то. Еще раз, есть list, он же всегда ordered, потому что элементы в list'е находятся в определенном порядке, у них есть позиция. Но в случае с предикатом типа multi и unsorted_solutions у тебя в списке элементы будут находится в том порядке в каком тебе возвращает решения этот самый предикат, а предикат типа multi может их возвращать в любом порядке. Поэтому unsorted_solutions и имеет тип cc_multi, потому как вариантов комбинации решений может быть много [«dir1», «dir3», «dir2»], [«dir2», «dir3», «dir1»] и т.д. (это все разные списки), но выберут и вернут только один из этих вариантов. А просто solutions собирает все решения предиката multi, сортирует, убирает дубликаты и возвращает один и тот же результат, т.е. что-то типа [«dir1», «dir2», «dir3»].

Где там про обход багов?

Прям там и нет. Но надо просто рассылку разработчиков читать переодически, вот к примеру, хотя бы http://www.mercurylang.org/list-archives/developers/2001-March/011835.html, http://www.mercurylang.org/list-archives/developers/2007-January/014604.html .

Для меня (и я так понимаю для разработчиков тоже) есть две ситуации зачем в логическом языке запрещать во _всех_ конъюнкциях и дизъюнкциях менять местами независимые выражения:

1) ураганный ***** код в стиле D \= 0, R = Num / D, когда нужно что-бы во всем модуле ни в коем случае не поменялось ничего местами;

2) баг или особенности (изменения) оптимизатора какого нибудь компилятора mercury с наложением на ошибку в коде, поэтому авторы и пишут «ease of programming and portability» и поэтому засунули эти ключи в стандарт и расписали последовательность миниальной перестановки и выполнения кода, так сказать, позаботились о несчастных программистах.

С радостью приму дополнения к этим пунктам =)