Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Prolog
Перезагрузить страницу 4. Написать программу, которая возвращает список
Ответ
 
Опции темы Опции просмотра
  (#46 (permalink)) Старый
SergeMukhin78 SergeMukhin78 вне форума
Member
 
Сообщений: 559
Сказал(а) спасибо: 17
Поблагодарили 35 раз(а) в 35 сообщениях
Регистрация: 28.03.2012
По умолчанию 27.12.2017, 08:53

пришел лесник и всех разогнал
Ответить с цитированием
  (#47 (permalink)) Старый
SergeMukhin78 SergeMukhin78 вне форума
Member
 
Сообщений: 559
Сказал(а) спасибо: 17
Поблагодарили 35 раз(а) в 35 сообщениях
Регистрация: 28.03.2012
По умолчанию 27.12.2017, 15:43

Цитата:
Сообщение от Винитарх Посмотреть сообщение
графики
первый график показывает время выполненения двух новых программы от Винитарх.
Программу с сортировкой уже не рассматриваем, как явного аутсайдера.

Видно как дребезжит график с удалением, так и должно быть, т.к. скорость удаления элемента зависит от того, как далеко он от начала.

Второй график показывает время выполнения после замены общего домена E на unsigned.
Скорости практически равны.
Миниатюры
capture.jpg   capture2.jpg  
Ответить с цитированием
  (#48 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,956
Сказал(а) спасибо: 2
Поблагодарили 303 раз(а) в 303 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 27.12.2017, 16:37

Я думал, что Вы подкрутите мою прогу.
Пришлось самому слегка подкрутить однопроходную прогу, чтобы немного догнать Вашу. Если не догнал, то покажите графики, я знаю как ещё улучшить. Но тогда исходник будет выглядеть неприглядно, не по-проложьи.
Visual Prolog Код:
implement main
open core, console

class predicates
max3 : (unsigned*, unsigned, unsigned [out]) -> unsigned determ.   % три быстрых прохода
max3_ : (unsigned*, unsigned, unsigned, unsigned, unsigned [out]) -> unsigned determ.
max1 : (unsigned*) -> unsigned* determ.    % один медленный проход
s : (unsigned,unsigned,unsigned,unsigned,unsigned,unsigned) procedure (i,i,i,o,o,o).
max1_ : (unsigned*,unsigned,unsigned,unsigned) -> unsigned*.
w : (unsigned,unsigned,unsigned,unsigned,unsigned,unsigned,unsigned) procedure (i,i,i,i,o,o,o).

clauses
max3([Max|List], SuperMax, Count) = max3_(List, Max, SuperMax, 1, Count) :- Max<SuperMax,!.
max3([_|List], SuperMax, Count) = max3(List, SuperMax, Count).

max3_([Max|List], Max, SuperMax, I, Count) = max3_(List, Max, SuperMax, I+1, Count) :-!.
max3_([A|List], Max, SuperMax, _I, Count) = max3_(List, A, SuperMax, 1, Count) :- A>Max, A<SuperMax,!.
max3_([_|List], Max, SuperMax, I, Count) = max3_(List, Max, SuperMax, I, Count).
max3_([], Max, _SuperMax, I, I) = Max.

max1([A,B,C|List]) = max1_(List,M1,M2,M3) :- s(A,B,C,M1,M2,M3).

s(A,B,C,A,B,C) :- A>=B, B>=C,!.
s(A,B,C,A,C,B) :- A>=C, C>=B,!.
s(A,B,C,B,A,C) :- B>=A, A>=C,!.
s(A,B,C,B,C,A) :- B>=C, C>=A,!.
s(A,B,C,C,A,B) :- C>=A, A>=B,!.
s(A,B,C,C,B,A).

max1_([E|List],A,B,C) = max1_(List,M1,M2,M3) :- w(E,A,B,C,M1,M2,M3).
max1_([],A,B,C) = [A,B,C].

w(E,A,B,_C,E,A,B) :- E>=A,!.
w(E,A,B,_C,A,E,B) :- E>=B,!.
w(E,A,B,C,A,B,E) :- E>=C,!.
w(_,A,B,C,A,B,C).

run() :- List = [3,4,7,5,6,7,8],
            A = max3(List, upperBound(unsigned), I1),   % вызов трёх быстрых проходов
            ( I1 >= 3, Result = [A,A,A] orelse
               I1 = 2, B = max3(List, A, _), Result = [A,A,B] orelse
               I1 = 1, B = max3(List, A, I2),
               ( I2 >= 2, Result = [A,B,B] orelse
                 C = max3(List, B,_), Result = [A,B,C] )),
            write(Result),nl,
            Result1 = max1(List),   % вызов одного медленного прохода
            write(Result1),
            _=readchar() orelse
            write("Что-то не так..."),
            _=readchar().

end implement main

goal
    console::run(main::run).
Ответить с цитированием
Ads
  (#49 (permalink)) Старый
SergeMukhin78 SergeMukhin78 вне форума
Member
 
Сообщений: 559
Сказал(а) спасибо: 17
Поблагодарили 35 раз(а) в 35 сообщениях
Регистрация: 28.03.2012
По умолчанию 27.12.2017, 17:07

на сегодня всё. у нас начинается корпоратив скоро. Мне пришлось убирать determ, т.к. он явно лишний, вот сама программа (без моей не очень красивой). Графики строю в excel по данным из этой программы.

Visual Prolog Код:
class predicates
    max3 : (unsigned*, unsigned, unsigned [out]) -> unsigned determ. % три быстрых прохода
    max3_ : (unsigned*, unsigned, unsigned, unsigned, unsigned [out]) -> unsigned determ.
    max1 : (unsigned*) -> unsigned* determ. % один медленный проход
    max1_ : (unsigned*, unsigned, unsigned, unsigned) -> unsigned* determ.

clauses
    max3([Max | List], SuperMax, Count) = max3_(List, Max, SuperMax, 1, Count) :-
        Max < SuperMax,
        !.
    max3([_ | List], SuperMax, Count) = max3(List, SuperMax, Count).

    max3_([Max | List], Max, SuperMax, I, Count) = max3_(List, Max, SuperMax, I + 1, Count) :-
        !.
    max3_([A | List], Max, SuperMax, _I, Count) = max3_(List, A, SuperMax, 1, Count) :-
        A > Max,
        A < SuperMax,
        !.
    max3_([_ | List], Max, SuperMax, I, Count) = max3_(List, Max, SuperMax, I, Count).
    max3_([], Max, _SuperMax, I, I) = Max.

    max1([A, B, C | List]) = max1_(List, A, B, C) :-
        A >= B,
        B >= C,
        !.
    max1([A, B, C | List]) = max1_(List, A, C, B) :-
        A >= C,
        C >= B,
        !.
    max1([A, B, C | List]) = max1_(List, B, A, C) :-
        B >= A,
        A >= C,
        !.
    max1([A, B, C | List]) = max1_(List, B, C, A) :-
        B >= C,
        C >= A,
        !.
    max1([A, B, C | List]) = max1_(List, C, A, B) :-
        C >= A,
        A >= B,
        !.
    max1([A, B, C | List]) = max1_(List, C, B, A) :-
        C >= B,
        B >= A.

    max1_([E | List], A, B, _C) = max1_(List, E, A, B) :-
        E >= A,
        !.
    max1_([E | List], A, B, _C) = max1_(List, A, E, B) :-
        E >= B,
        !.
    max1_([E | List], A, B, C) = max1_(List, A, B, E) :-
        E >= C,
        !.
    max1_([_ | List], A, B, C) = max1_(List, A, B, C).
    max1_([], A, B, C) = [A, B, C].

class predicates
    algVini1 : (unsigned* List) -> unsigned* Result.
clauses
    algVini1(List) = Result :-
        Result = max1(List),
        !.
    algVini1(_List) = [].

class predicates
    algVini : (unsigned* List) -> unsigned* Result.
clauses
    algVini(List) = Result :-
        A = max3(List, upperBound(integer), I1), % вызов трёх быстрых проходов
        (I1 >= 3 and Result = [A, A, A]
            orelse I1 = 2 and B = max3(List, A, _) and Result = [A, A, B]
            orelse I1 = 1 and B = max3(List, A, I2) and (I2 >= 2 and Result = [A, B, B] orelse C = max3(List, B, _) and Result = [A, B, C])),
        !.
    algVini(_List) = [].

class predicates
    algNlnN : (unsigned* List) -> unsigned* Result.
clauses
    algNlnN(List) = [H1, H2, H3] :-
        [H1, H2, H3 | _] == list::sort(List, descending).

class predicates
    alg3remove : (unsigned* List) -> unsigned* Result.
clauses
    alg3remove(List) = Result :-
        VList = varM::new(List),
        Result =
            [ M ||
                _ = std::cIterate(3),
                M = list::maximum(VList:value),
                VList:value := list::remove(VList:value, M)
            ].

class predicates
    algN3 : (unsigned* List) -> unsigned* Result.
clauses
    algN3(List) = Result :-
        Count = varM_unsigned::new(),
        A = maxP(List, upperBound(unsigned), Count),
        if 3 <= Count:value then
            Result = [A, A, A]
        elseif 2 = Count:value then
            B = maxP(List, A, Count),
            Result = [A, A, B]
        else
            B = maxP(List, A, Count),
            if 2 <= Count:value then
                Result = [A, B, B]
            else
                C = maxP(List, B, Count),
                Result = [A, B, C]
            end if
        end if.

class predicates
    prof : (unsigned* List, function{unsigned*, unsigned*}) -> real Sec.
clauses
    prof(List, Function) = performanceCounter::run2seconds({  :- _ = Function(List) }).

class predicates
    makeList : (unsigned N) -> unsigned* List.
clauses
    makeList(N) =
        [ X ||
            _I = std::cIterate(N),
            X = math::random(10 * N)
        ].

clauses
    run() :-
        stdio::write("N\tSort\tMy\tremove\n"),
        foreach N0 = std::fromTo(1, 100) do
            N = 1000 * N0,
            memory::garbageCollect(),
            List = makeList(N),
            Sln = prof(List, algNlnN),
            memory::garbageCollect(),
            S3 = prof(List, algN3),
            S3remove = prof(List, alg3remove),
            S3Vini = prof(List, algVini),
            S1Vini = prof(List, algVini1),
            stdio::writef("%5d\t%\t%\t%\t%\t%\n", N, Sln, S3, S3remove, S3Vini, S1Vini)
%            Result1 = algNlnN(List),
%            Result2 = algN3(List),
%            Result3 = alg3remove(List),
%            Result4 = algVini(List),
%            Result5 = algVini1(List),
%            Result4 == Result1
%            stdio::writef("%   % \n", Result1, Result2),
%            nothing(Result1, Result2),
%            try
%                Result1 == Result2
%            catch TraceId do
%                stdio::writef("List:% \n", List),
%                exception::continue_unknown(TraceId)
%            end try
        end foreach.
Ответить с цитированием
  (#50 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,956
Сказал(а) спасибо: 2
Поблагодарили 303 раз(а) в 303 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 28.12.2017, 20:06

Представленная в сообщении №48 прога хуже предыдущей. Хотя "теоретически" должна быть лучше. По всему видать, что реализация обработки списков и генерация кода оптимизированы несколько по другому, чем раньше писали в книгах.
Ответить с цитированием
Ads.
  (#51 (permalink)) Старый
SergeMukhin78 SergeMukhin78 вне форума
Member
 
Сообщений: 559
Сказал(а) спасибо: 17
Поблагодарили 35 раз(а) в 35 сообщениях
Регистрация: 28.03.2012
По умолчанию 28.12.2017, 20:16

Цитата:
Сообщение от Винитарх Посмотреть сообщение
реализация обработки списков и генерация кода оптимизированы несколько по другому
реализация обработки списков не менялись с 7.5 точно, а может и дольше. Но в 3.1 было не так.

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

Последний раз редактировалось SergeMukhin78; 28.12.2017 в 20:16 Причина: опечатка
Ответить с цитированием
  (#52 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,956
Сказал(а) спасибо: 2
Поблагодарили 303 раз(а) в 303 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 28.12.2017, 23:16

Цитата:
Сообщение от SergeMukhin78 Посмотреть сообщение
тут наверно сказалось, что 4 головы и в каждой происходит вычленение элементов списка
Дык, вот именно это я и устранил в последнем варианте однопроходной проги. Но это только ухудшило время.
Цитата:
Сообщение от SergeMukhin78 Посмотреть сообщение
реализация обработки списков не менялись с 7.5 точно, а может и дольше. Но в 3.1 было не так.
Хе... Я и имею в виду версии 2-5. В них было понятно как улучшить скорость проги - группировать подобные клозы и оформлять их отдельным предикатом, а также не писать многоголовые предикаты. А сейчас получается, что многоголовые предикаты работают быстрее, чем сгруппированные по частям.
Чтобы мне Вас догнать, наверное надо отказаться от проложного стиля и переписать предикат алгоритмическим быдлокодом с синтокостылями
Ответить с цитированием
  (#53 (permalink)) Старый
SergeMukhin78 SergeMukhin78 вне форума
Member
 
Сообщений: 559
Сказал(а) спасибо: 17
Поблагодарили 35 раз(а) в 35 сообщениях
Регистрация: 28.03.2012
По умолчанию 28.12.2017, 23:44

Цитата:
Сообщение от Винитарх Посмотреть сообщение
я и устранил в последнем варианте
я последний вариант не смотрел. позже посмотрю


Цитата:
Сообщение от Винитарх Посмотреть сообщение
А сейчас получается, что многоголовые предикаты работают быстрее, чем сгруппированные по частям.
да, я тут подумал, действительно, обработка многоловье поменялось, а я отвечал про списки.

Я использую счётчик varM_unsigned
Ответить с цитированием
  (#54 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,956
Сказал(а) спасибо: 2
Поблагодарили 303 раз(а) в 303 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 30.12.2017, 20:23

Цитата:
Сообщение от SergeMukhin78 Посмотреть сообщение
я последний вариант не смотрел. позже посмотрю
Вот мне и интересен Ваш ответ, как человека, который лучше всех понимает механизм обработки компилятором данной ситуации.
Цитата:
Сообщение от SergeMukhin78 Посмотреть сообщение
Я использую счётчик varM_unsigned
Я понял уже, что у Вас чисто императивная прога, т.к. максимальную скорость программы можно достичь только императивизмом: фактами-переменными, разрушающим присваиванием, процедурным режимом детерминизма предикатов и пр. Именно благодаря этому Ваша прога на пол головы быстрей моей.
На праздниках может сподоблюсь и догоню, использовав этот самый императивизм
Ответить с цитированием
  (#55 (permalink)) Старый
SergeMukhin78 SergeMukhin78 вне форума
Member
 
Сообщений: 559
Сказал(а) спасибо: 17
Поблагодарили 35 раз(а) в 35 сообщениях
Регистрация: 28.03.2012
По умолчанию 30.12.2017, 23:36

Цитата:
Сообщение от Винитарх Посмотреть сообщение
быстрей моей.
всего то 10%

я на праздниках посмотрю все варианты, и, если будет интернет, отпишусь
Ответить с цитированием
  (#56 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,956
Сказал(а) спасибо: 2
Поблагодарили 303 раз(а) в 303 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 31.12.2017, 19:19

Вот прога. Она содержит три однопроходных решения.
Первое решение - многоголовый предикат.
Второе решение - двухголовый предикат с вынесенными наружу сравнялками.
Третье решение - императивное. Оно конечно самое быстрое и как минимум не хуже решения SergeMukhin78. Чем длиннее список, тем больше выигрыш императивного решения по сравнению с многоголовым.
Visual Prolog Код:
implement main
open core, console

class predicates
mx1 : (unsigned*) -> unsigned* determ.    % один многоголовый проход
mx1_ : (unsigned*,unsigned,unsigned,unsigned) -> unsigned*.

clauses
mx1([A,B,C|List]) = mx1_(List,A,B,C) :- A>=B, B>=C,!.
mx1([A,B,C|List]) = mx1_(List,A,C,B) :- A>=C, C>=B,!.
mx1([A,B,C|List]) = mx1_(List,B,A,C) :- B>=A, A>=C,!.
mx1([A,B,C|List]) = mx1_(List,B,C,A) :- B>=C, C>=A,!.
mx1([A,B,C|List]) = mx1_(List,C,A,B) :- C>=A, A>=B,!.
mx1([A,B,C|List]) = mx1_(List,C,B,A).

mx1_([E|List],A,B,_C) = mx1_(List,E,A,B) :- E>=A,!.
mx1_([E|List],A,B,_C) = mx1_(List,A,E,B) :- E>=B,!.
mx1_([E|List],A,B,C) = mx1_(List,A,B,E) :- E>=C,!.
mx1_([_|List],A,B,C) = mx1_(List,A,B,C).
mx1_([],A,B,C) = [A,B,C].

class predicates
max1 : (unsigned*) -> unsigned* determ.    % один малоголовый проход
s : (unsigned,unsigned,unsigned,unsigned,unsigned,unsigned) procedure (i,i,i,o,o,o).
max1_ : (unsigned*,unsigned,unsigned,unsigned) -> unsigned*.
w : (unsigned,unsigned,unsigned,unsigned,unsigned,unsigned,unsigned) procedure (i,i,i,i,o,o,o).

clauses
max1([A,B,C|List]) = max1_(List,M1,M2,M3) :- s(A,B,C,M1,M2,M3).

s(A,B,C,A,B,C) :- A>=B, B>=C,!.
s(A,B,C,A,C,B) :- A>=C, C>=B,!.
s(A,B,C,B,A,C) :- B>=A, A>=C,!.
s(A,B,C,B,C,A) :- B>=C, C>=A,!.
s(A,B,C,C,A,B) :- C>=A, A>=B,!.
s(A,B,C,C,B,A).

max1_([E|List],A,B,C) = max1_(List,M1,M2,M3) :- w(E,A,B,C,M1,M2,M3).
max1_([],A,B,C) = [A,B,C].

w(E,A,B,_C,E,A,B) :- E>=A,!.
w(E,A,B,_C,A,E,B) :- E>=B,!.
w(E,A,B,C,A,B,E) :- E>=C,!.
w(_,A,B,C,A,B,C).

class facts
a:unsigned := erroneous.
b:unsigned := erroneous.
c:unsigned := erroneous.
class predicates
m1 : (unsigned*) -> unsigned* determ.       % один императивный проход
m1_ : (unsigned*) -> unsigned*.

clauses
m1([A,B,C|List]) = m1_(List) :-
                                    if A>=B then if B>=C then a := A, b := B, c := C
                                                            elseif A>=C   then a := A, b := C, c := B
                                                                                else a := C, b := A, c := B
                                                        end if
                                                elseif B>=C then if A>=C then a := B, b := A, c := C
                                                                                        else a := B, b := C, c := A
                                                                          end if
                                                                    else a := C, b := B, c := A
                                    end if.

m1_([E|List]) = m1_(List) :-
                                        if E>c then if E>b then if E>a then c := b, b := a, a := E
                                                                                    else c := b, b := E
                                                                          end if
                                                                   else c := E
                                                          end if
                                        end if.
m1_([]) = [a,b,c].

run() :-foreach N0 = std::fromTo(1, 200) do
                    N = 1000 * N0,
                    memory::garbageCollect(),
                    List = [X||_ = std::cIterate(N), X = math::random(N)],
                    T1 = performanceCounter::getTick(),
                    Result1 = mx1(List),   % один многоголовый проход
                    T2 = performanceCounter::getTick(),
                    %write(Result1),nl,
                    Result2 = max1(List),   % один малоголовый проход
                    T3 = performanceCounter::getTick(),
                    %write(Result2),nl,
                    Result3 = m1(List),    % один императивный проход
                    T4 = performanceCounter::getTick(),
                    %write(Result3),nl,
                    writef("%5d\t%\t%\t%\n", N, T2-T1, T3-T2, T4-T3)
                    orelse succeed
            end foreach,
            _=readchar().

end implement main

goal
    console::run(main::run).

Время измерял в тиках в VIP7.5:
adhaoeee.jpg

Последний раз редактировалось Винитарх; 31.12.2017 в 19:38 Причина: вставил картинку с графиками
Ответить с цитированием
  (#57 (permalink)) Старый
SergeMukhin78 SergeMukhin78 вне форума
Member
 
Сообщений: 559
Сказал(а) спасибо: 17
Поблагодарили 35 раз(а) в 35 сообщениях
Регистрация: 28.03.2012
По умолчанию 03.01.2018, 17:31

Цитата:
Сообщение от Винитарх Посмотреть сообщение
три однопроходных решения.
на другой машине получил аналогичные графики.

если убрать присваивание :=erroneous, то немного вперед чуток выходит императивный.

Моя программа, т.к. там 3 прохода, отстаёт всегда.

ps
зачем измерять в тиках, если есть в сек run2seconds?
Миниатюры
nieiie.jpg   nieiie2.jpg  
Ответить с цитированием
  (#58 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,956
Сказал(а) спасибо: 2
Поблагодарили 303 раз(а) в 303 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 03.01.2018, 19:17

Цитата:
Сообщение от SergeMukhin78 Посмотреть сообщение
на другой машине получил аналогичные графики.
Кстати, попробовал запустить прогу в VIP801 и приятно удивился - восьмёрка быстрей чем VIP7.5 примерно на 30% в этой задаче!
И если Вы заметили, я запускаю тест не до 100, как Вы, а до 200:
Visual Prolog Код:
foreach N0 = std::fromTo(1, 200) do
Отличия видны ярче. Императивный предикат заканчивается на трёх тысячах тиков в VIP8. А в VIP7.5 требуется около четырёх тысяч.
09.jpg

И Вы ещё не просветили, почему многоголовый быстрее двухголового. В старых Прологах было всегда наоборот. В чём фишка?

Цитата:
Сообщение от SergeMukhin78 Посмотреть сообщение
если убрать присваивание :=erroneous
Вот просто так взять и убрать? Компилятор же не пропустит . Да и смысл в чём? Всё равно в самом начале обработки списка факты-переменные получат свои значения.

Цитата:
Сообщение от SergeMukhin78 Посмотреть сообщение
Моя программа, т.к. там 3 прохода, отстаёт всегда.
Как это "отстаёт всегда"? На всех графиках, кроме последних (в сообщении 57) Ваша прога всегда была впереди.

Цитата:
Сообщение от SergeMukhin78 Посмотреть сообщение
зачем измерять в тиках, если есть в сек run2seconds?
run2seconds есть только в VIP8. А он у меня PE. Я работаю в VIP7.5, т.к. он у меня CE. Не люблю "гадское" окошко и обрезанные библиотеки в PE.
И если надо, то перевести тики в секунды можно в одну строчку, сами знаете.

Последний раз редактировалось Винитарх; 03.01.2018 в 19:26
Ответить с цитированием
  (#59 (permalink)) Старый
SergeMukhin78 SergeMukhin78 вне форума
Member
 
Сообщений: 559
Сказал(а) спасибо: 17
Поблагодарили 35 раз(а) в 35 сообщениях
Регистрация: 28.03.2012
По умолчанию 03.01.2018, 19:33

Цитата:
Сообщение от Винитарх Посмотреть сообщение
Вот просто так взять и убрать? Компилятор же не пропустит . Да и смысл в чём?
просто присвоил любое значение. Если факт переменной хоть раз присвоено значение erroneous, то каждый доступ к ней будет проверять эту переменную на erroneous, и каждое присвоение будет генерировать лишнюю команду.

Цитата:
Сообщение от Винитарх Посмотреть сообщение
последних
я про последние и говорил. Отстаёт.

Цитата:
Сообщение от Винитарх Посмотреть сообщение
А он у меня PE.
как PE? в Вас должно быть CE! посмотрите dropbox там лежит 801.

Последний раз редактировалось SergeMukhin78; 03.01.2018 в 19:34 Причина: опечатка
Ответить с цитированием
  (#60 (permalink)) Старый
Винитарх Винитарх вне форума
Специалист
 
Аватар для Винитарх
 
Сообщений: 7,956
Сказал(а) спасибо: 2
Поблагодарили 303 раз(а) в 303 сообщениях
Регистрация: 01.03.2003
Адрес: Краснодар
По умолчанию 04.01.2018, 03:01

Цитата:
Сообщение от SergeMukhin78 Посмотреть сообщение
просто присвоил любое значение.
Ага, понятно. Не присваивание убрать, а erroneus заменить, например, ноликом. Очень даже ускоряет. Проверил на VIP801:
09.jpg
По сравнению с графиком из сообщения 58 очень даже впечатляет - ещё на 30% время уменьшилось.
Цитата:
Сообщение от SergeMukhin78 Посмотреть сообщение
Если факт переменной хоть раз присвоено значение erroneous, то каждый доступ к ней будет проверять эту переменную на erroneous, и каждое присвоение будет генерировать лишнюю команду.
Спасибо, буду знать.
Цитата:
Сообщение от SergeMukhin78 Посмотреть сообщение
как PE? в Вас должно быть CE! посмотрите dropbox там лежит 801.
Спасибо, увидел. 801 CE лежит, но без ключика. А без оного просит регистрацию, обрезает библиотеки, выводит панель BUY online VISA, т.е. по сути - PE. Одно хорошо - не выводит "гадское" окошко о некоммерческом использовании.

Последний раз редактировалось Винитарх; 04.01.2018 в 03:05
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дан список. Написать функцию, которая возвращает количество уровней сложного списка н Елизавета Яросевич Задания за деньги 0 03.11.2013 20:42
Написать функцию,которая по двум числам формирует список Marishe Lisp 1 13.10.2010 11:37
Написать программу которая разделит исходный список denis120 Lisp 3 22.05.2010 00:19
Определить рекурсию, которая возвращает список hattation Lisp 3 10.02.2010 20:21
Написать функцию, которая по списку lst и атому obj возвращает множество klava Lisp 1 22.12.2009 14:05
Нужно написать рекурсивную функцию, которая возвращает t Bender266 Lisp 6 06.05.2009 14:40
Написать функцию, которая возвращает истину Bender266 Lisp 0 06.05.2009 13:47
Написать функцию ,которая добавляет в список по одному элементу Mozgolom Lisp 2 14.05.2008 03:22
Написать функцию, которая возвращает количество вершин Adebayor Lisp 11 16.12.2007 22:58
Написать функцию LAST1, которая возвращает предпоследний элемент списка Sw1ft Lisp 9 17.05.2007 20:25
Написать функцию, которая оращает многоуровневый список super_girl Lisp 2 13.04.2007 07:25
Написать программу которая закрывает любую программу из автозагрузки без перезагрузк Anonymous C++ Builder 1 07.10.2003 11:24



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов