Пета задача

  1. В примера за функцията identifiers '+' е самостоятелен специален символ, което по дефиницията на идентификатор ("В допълнение, всеки самостоятелен специален символ също е идентификатор") го прави такъв, защо не е в резултата?

    Публикувано преди
  2. А какво трябва да се случва, ако низа съдържа невалиден идентификатор? Пример: (+ (1 4ac))

    Публикувано преди
  3. @Димо
    Ако питаш за низа code, който се подава като аргумент на case_sensitive(code, identifiers), то не трябва да те интересува какво има в него. Прочети пак задачата и ще ти стане ясно >> "като малките/големите букви в идентификаторите са заместени така че да съвпадат със съответните им от identifiers".

    Публикувано преди
  4. И аз исках да питам същото като Александър Мартинов, а също и как точно трябва да се казва функцията от втората задача - в условието пише get_first_identifiers, а в примера е само identifiers ? Edit: tova s imenata e solved.

    P.S Малко страничен въпрос, но как във vim се селектира целия текст и се копира? В google намерих че ставало с ggvg + y , но нещо не се получава поне при мен?

    Публикувано преди
  5. @Мартин Последното g e G, т.е. ggvG + y, с gg се отива на първия ред, с v се влиза в специален режим, с G се отива на последния ред, а с y се копира.

    Публикувано преди
  6. @Живка 10кс. Имаш почерпка и голям респект! :)

    Публикувано преди
  7. В примера на identifiers отговора не трябва ли да е {'+', 'some-number'}? Нали в условието пише, че всеки самостоятелен специален символ (в това число '+') е идентификатор ?!

    Публикувано преди
  8. Искам да попитам каква точно е дефиницията за число? "числа (последователности от цифри, като те могат да съдържат най-много една точка)" това означава ли, че .5 и 5. са валидни числа или винаги са във вида xy.zw

    Публикувано преди
  9. Здравейте, един въпрос и от мен: предполагам, че в низовете заградени с двойни кавички в Lisp има начин да се сложи и символ двойна кавичка (по стандартния начин \" може би?). Да се съобразяваме ли с това?

    В допълнение, ето малко тестове.

    Публикувано преди
  10. @Павел - според мен би трябвало да са валидни, в голяма част от езиците са. Например .5 е 0.5, a 5. e 5.0 (подсказва на компилатора/интерпретатора, че не е int, а double/float).

    @Мартин - "Edit: tova s imenata e solved" - как?

    Иначе подкрепям въпросите на Александър Далемски и Светослав.

    Също и имам един - " Идентификаторите са низове съставени от букви, цифри и специални символи, като започват с буква " и отделно: " В допълнение, всеки самостоятелен специален символ също е идентификатор. " - това го разбирам така: "asd+", "a$s+d" са валидни единични идентификатори, но ако бяха "asd +" и "a$s + d" означава, че първия се разбива на 2 идентификатора ("asd" и "+") , а втория на три ("a$s", "+" и "d") ?

    Публикувано преди
  11. @Кирил, в примерния тест тестват с identifiers и накрая така го написах.

    Публикувано преди
  12. Имам няколко въпроса:

    1. Как трябва да се казва втората функция? (identifiers ли?)

    2. Примерният тест (в условието) на втората грешен ли е? '+' счита ли се за идентификатор или не?

    3. В низовете и в идентификаторите има ли букви различни от a-z или A-Z?

    4. "This is quote \"" и "\"StRiNg\"" валидни последователности от символи оградени с двойни кавички ли са?

    Публикувано преди
  13. @Александър Маринов, Светослав и Калоян:
    Да, това е грашка в условието, която е поправена. + е валиден идентификатор.

    @Димо:
    Хвърляй някакво изключение, ако не можеш да токенизираш низа правилно.

    @Мартин, Кирил и Калоян:
    Функцията се казва identifiers. Условието е поправено.

    @Павел:
    Да, .5 и 5. са валидни числа.

    @Александър Далемски и Калоян:
    Може да има двойни кавички в низ и това е начина. Но най-добре игнорирайте това, защото няма да го тестваме. Това е едно от многото неща, които пропускаме, за да улесним условието.

    @Кирил:

    ..."asd+", "a$s+d" са валидни единични идентификатори, но ако бяха "asd +" и "a$s + d" означава, че първия се разбива на 2 идентификатора ("asd" и "+") , а втория на три ("a$s", "+" и "d") ?
    

    Именно.

    Публикувано преди
  14. @Калоян:
    3. Не, няма да има букви различни от a-z и A-Z

    Публикувано преди
  15. @Калоян, @Димо

    Ако си раздробите тестовете на по-малки, логически цели методи, ще ви дадем точка.

    Публикувано преди
  16. Въпрос за последната функция case_sensitive(code, identifiers).
    1?Резултатъt генерира ли се или например в невалиден стринг за code и валидни identifiers в стринга се заменят думите case-insensitive съвпадащи с identifiers и толкова. т.е. при
    code = ' ( + 1 2 \t k K) '
    identifiers = ['K']
    резултатът
    1)' ( + 1 2 \t K K) ' ли е или
    2)'(+ 1 2 К K)'


    и още нещо
    2?Валидира ли се входа и ако да какво става при невалиден code или identifiers, който не отговаря на определението
    Публикувано преди
  17. @Павел Относно първия ти въпрос, тъй като условието на задачата е: Върнатият код представлява низа code, като малките/големите букви в идентификаторите са заместени така че да съвпадат със съответните им от identifiers. Ако даден идентификатор се среща в в code, но не се среща в identifiers, го оставете непроменен.

    Мисля, че просто се прави замяната и толкова - никъде не пише "оправете кода", а само "оправете идентификаторите".

    Публикувано преди
  18. @Радослав благодаря. В крайна сметка и аз така реших да го направя.
    ето и малко тестове:
    http://pastie.org/1885113
    Главно съм тествал за символните поредици дали са идентификатори или токени.

    Публикувано преди
  19. Теста ми е оправен.

    Публикувано преди
  20. Btw, за да не се обърка някой:

    >>> print(case_sensitive_code)
    '(+ some-number some-number some-number)'

    Изхода не е верен, кавичките ги няма. :)
    Принтиране на низ не изкарва кавички. За сметка на това, ако print-а го нямаше, ще си изкара кавичките, но в случая не би трябвало (при положение, че не сме ги слагали допълнително). :)
    Надявам се не издребнявам, просто за малко да ме шашне, та трябваше да препрочитам условието. :)

    Публикувано преди
  21. Още един въпрос от мен - така като говорим за Scheme, можем ли да разчитаме на синтаксиса, в някои отношения. И по-конкретно, това за което питам - може ли да разчитаме, че низът, който ще ни се подава, ще започва с "(" и ще завършва с ")" ( и евентуално някакви white-spaces (не обичам думата "шпация" :D ) в началото или края )?

    P.S. Относно тестовете на Александър Далемски:

     self.assertEqual(
            ['(', 'take', '2', '(', '\'', 'first', '"Eddie Vedder"',
             '1.', '0.33', ')', '#f', '^', ')'],
            tokenize('(take 2 (\'first "Eddie Vedder" 1. 0.33) #f ^)'))
    

    Това не е ли малко грешно? Защо при подниз "'first" се очакват 2 токена (blah!)? В теста се очаква, че това ще се раздели на "'" и "first", аз го тълкувам като невалиден подниз. Нито е идентификатор (не започва с буква), нито е специален силвол (слято е "'" с "first"), нито е число. Ако имаше white space между "'" и "first", товава трябва да е ОК. Или съм разбрал грешно ?

    Публикувано преди
  22. Без да критикувам никого (напротив, евала за усилието) - като цяло тестовете този път са на места или леко грешни или голям overkill.
    Не че има лошо хората да си пишат по-сложни домашни за удоволствие и упражнение, но нека хората го имат в предвид и да не се стряскат прекалено много ако нещо не им излиза. :)

    Публикувано преди
  23. @Виктор - смятам, че е добре да има "overkill" - колкото по-сложни са тестовете, толкова по-голямо е спокойствието за нас самите (ако ги минем, разбира се).

    Това, че има грешки - аз лично май не видях други, освен тази в предния ми пост. И даже не съм сигурен, че е грешка, може и аз да не съм разбрал правилно.

    А иначе смятам, че е добре да се казват, ако се откриват грешки - не да се заяждаме, а да си доизясняваме нещата - защото или питащият ще е в грешка, или писалия теста. Така че си е win-win.

    BTW, 10х на всички за тестовете, супер работа (:

    EDIT - пък който не иска да си имплементира допълнителните неща (като например това да има двойна, escape-ната кавичка в низ (Йоан каза, че няма да го проверяват това) ) може просто да си гледа кой тест гърми, да разбира защо гърми и просто да го премахва. Аз така правя :D

    Публикувано преди
  24. @Виктор: Вярно е, че има грешки. В моите тестове бях забравил, че \ в многоредовите низови литерали не се приема директно както в raw низ, а трябва да се escape-не като \\. Поправил съм това. В тестовете на Димо също не са escape-нати както трябва обратните наклонени черти.

    @Кирил: Доколкото си спомням, в Lisp поставянето на единична кавичка пред идентификатор изключва интерпретацията на съответния идентификатор (кара го да се възприема като литерал вместо като име на функция или променлива). В този смисъл синтаксисът е валиден.

    Публикувано преди
  25. Да, синтаксисът на 'first е валиден за Lisp, но не и за условието на тази задача :) В този смисъл може би не е добра идея да бъде използвано точно това като тест конкретно за тази задача - в условието изрично пише, че ' е самостоятелен token. (да, това прави решенията на тази задача лееееекичко неприложими за обработка на истински Scheme-код, защото ще се опитат да променят и литералите, но какво да правиш :)

    Публикувано преди

Трябва да сте влезли в системата, за да може да отговаряте на теми.