В GNU Делают, как я преобразовываю переменную в нижний регистр?

Вот пример рекурсивного алгоритма для обращения к односвязному списку. На ноутбуке со следующей спецификацией (память 4G, процессор Intel Core i5 2.3GHz, 64-разрядная версия Windows 7) эта функция будет запущена с ошибкой StackOverflow для связанного списка размером около 10 000.

Могу сказать, что мы должны использовать рекурсию разумно, всегда принимая во внимание масштаб системы. Часто рекурсия может быть преобразована в итеративную программу, которая масштабируется лучше. (Одна итеративная версия того же алгоритма приведена в нижней части страницы, она меняет один и тот же список размером 1 миллион за 9 миллисекунд.)

    private static LinkedListNode doReverseRecursively(LinkedListNode x, LinkedListNode first){

    LinkedListNode second = first.next;

    first.next = x;

    if(second != null){
        return doReverseRecursively(first, second);
    }else{
        return first;
    }
}

public static LinkedListNode reverseRecursively(LinkedListNode head){
    return doReverseRecursively(null, head);
}

Итеративная версия того же алгоритма:

    public static LinkedListNode reverseIteratively(LinkedListNode head){
    return doReverseIteratively(null, head);
}   

private static LinkedListNode doReverseIteratively(LinkedListNode x, LinkedListNode first) {

    while (first != null) {
        LinkedListNode second = first.next;
        first.next = x;
        x = first;

        if (second == null) {
            break;
        } else {
            first = second;
        }
    }
    return first;
}


public static LinkedListNode reverseIteratively(LinkedListNode head){
    return doReverseIteratively(null, head);
}
49
задан DonGar 20 March 2009 в 01:00
поделиться

2 ответа

можно всегда метать икру от tr

LOWER_VAR = `echo $(VAR) | tr A-Z a-z`

или

LOWER_VAR  = $(shell echo $(VAR) | tr A-Z a-z)

функции 'lc', которые Вы пытающийся звонить от , GNU Делает Стандартную Библиотеку

Принятие, которое установлено, правильный синтаксис был бы

LOWER_VAR  = $(call lc,$(VAR))
48
ответ дан 3 revs, 2 users 86% 7 November 2019 в 21:31
поделиться

Можно сделать, это непосредственно в gmake, не используя GNU Делает Стандартную Библиотеку:

lc = $(subst A,a,$(subst B,b,$(subst C,c,$(subst D,d,$(subst E,e,$(subst F,f,$(subst G,g,$(subst H,h,$(subst I,i,$(subst J,j,$(subst K,k,$(subst L,l,$(subst M,m,$(subst N,n,$(subst O,o,$(subst P,p,$(subst Q,q,$(subst R,r,$(subst S,s,$(subst T,t,$(subst U,u,$(subst V,v,$(subst W,w,$(subst X,x,$(subst Y,y,$(subst Z,z,$1))))))))))))))))))))))))))

VAR = MixedCaseText
LOWER_VAR = $(call lc,$(VAR))

all:
        @echo $(VAR)
        @echo $(LOWER_VAR)

Это выглядит немного неуклюжим, но это сделало задание.

, Если Вы действительно идете с $ (оболочка) разнообразие, используйте := вместо всего =, как в LOWER_VAR := $(shell echo $VAR | tr A-Z a-z). Тем путем Вы только вызываете оболочку одно время, когда переменная объявляется вместо каждого раза, когда на переменную ссылаются!

Hope, которая помогает.

45
ответ дан jww 7 November 2019 в 21:31
поделиться
Другие вопросы по тегам:

Похожие вопросы: