Форум » » Примеры кода » Ответить

Примеры кода

Nex: В этой теме будут примеры работающего кода для QSP.

Ответов - 84, стр: 1 2 3 4 5 All

noname: ладно-ладно. НО хорошо бы, что бы в новом хелпе было упомянуто, какие значения может возвращать та или иная функция. в-принципе, информации о том, что ложь=0 , истина= не 0 вполне достаточно, НО в хелпе не было сказано и этого и я думал так: ложь=0, истина=1. не ожидал других значений.

Korwin: noname пишет: QSP мне начинает нравиться... Ну мы же тебе говорили! :)

Byte: noname, значение "-1" было выбрано не спроста :) в том же basic'е "истина" тоже -1. сделано для того, чтобы сократить число булевых / логических операций (т.к. отрицание 0 это не 1, а именно -1. отрицание -1 как раз 0). если бы 1 означала "истину", то пришлось бы вводить дополнительные операции, схожие с "and","or","no".. а это сильно запутывает новичков. для примера - в c/c++ есть "||","&&","!" и есть "|", "&", "~".


Byte: noname пишет: хорошо бы, что бы в новом хелпе было упомянуто, какие значения может возвращать та или иная функция. похоже, что только для strcomp забыл это указать :) уже добавил в новую версию...

noname: следующий код получился в процессе разборок с массивами и вставками: A['актёр1место']=22 $A['игрок']='1' $x='1' *pl $A['игрок'] *pl $x if $A['игрок']=$x: *pl 'O.K!' *pl A['актёр<<$x>>место'] *pl '--------------' *pl A['актёр<<$A['игрок']>>место'] *pl '--------------' как вы думаете, что выведет этот кусок кода? по результатам я понял, что с массивами и вставками я разобрался, а вот как теперь относиться к QSP? я попробую организовать данные ещё как-нибудь иначе, но терпение уже на исходе.

noname: Byte пишет: $свойство['11_7_2'] = 'несъедобно' свойство чего? вещи, непися, контейнера или ещё чего? в большом проекте я хочу видеть: $A['поле11вещь7свойство2'] где $A-все переменные создаваемого мира 'поле11вещь7свойство2'- второе свойство 7-й вещи из тех, что находятся на поле с координатами 1,1 (в моём случае мир пока небольшой)

Byte: в строке *pl A['актёр<<$A['игрок']>>место'] ошибка. у тебя строка содержит внутри строку, которая задана неверно. нужно через дублирование кавычек (кавычки, включенные в строку): [pre2] *pl A['актёр<<$A[''игрок'']>>место'] [/pre2]

Byte: Плюс код можно немного сократить до: ("*pl" можно убрать, также как лишние строки) [pre2] A['актёр1место']=22 A['игрок']=1 x=1 A['игрок'] x if A['игрок']=x: 'O.K!' A['актёр<<x>>место'] '--------------' A['актёр<<A[''игрок'']>>место'] '--------------' [/pre2]

noname: Byte пишет: в строке *pl A['актёр<<$A['игрок']>>место'] ошибка. у тебя строка содержит внутри строку, которая задана неверно. нужно через дублирование кавычек (кавычки, включенные в строку крайне странно... в чём тут логика? сдаётся мне, что эту 'особенность' языка хорошо бы исправить. собственно мне нужна такая строка: *pl ' Вы находитесь '+$A['поле<<A[''актёр<<$A[''игрок'']>>место'']>>вид'] надеюсь, сработает... без операторов *pl ИМХО текст проги труднее читать и вообще, зря вы так URQL изуродовали. добавили бы всяких функций- и ладно. ну и интерфейс тоже неплох. управление инвентарём и кнопками(ACT) реализовано- суперкласс! моя первая прога на qsp будет обязательно кнопочной. хочу с вашими кнопочками побаловаться.

noname: *pl ' Вы находитесь '+$A['поле<<A[''актёр<<$A[''игрок'']>>место'']>>вид'] не фурычит. не соответствие открывающих и закрывающих... причём не помогает делание $A[''актёр<<$A[''игрок'']>>место''] строковой переменной та же ошибка

Byte: noname, это ни разу не ошибка, всё логично.. в строках ты используешь ещё строки.. интерпретатор изначально должен получить исходную строку (пропустив "вложенные"). вложенность кавычек задается их дублированием.. то есть 2 подряд идущих апострофа "превращаются" в один апостроф. затем полученная строка проверяется на "подвыражения".. если нашли, то в подвыражении получаем ещё строку, которая, опять же, должна быть верно задана.. снова вложенность кавычек.. noname пишет: собственно мне нужна такая строка: *pl ' Вы находитесь '+$A['поле<<A[''актёр<<$A[''игрок'']>>место'']>>вид'] не сработает. опять же у тебя с вложенными кавычками проблемы.. [pre2] A['игрок']=1 a['актёр1место']=2 $a['поле2вид']='лес' *pl ' Вы находитесь ' + $A['поле<<A[''актёр<<A[''''игрок'''']>>место'']>>вид'] [/pre2] как это разбирается: сначала получаем строку 'поле<<A[''актёр<<A[''''игрок'''']>>место'']>>вид', и определяем кавычки, включенные в строку. получаем: поле<<A['актёр<<A[''игрок'']>>место']>>вид далее здесь есть подвыражения. при вычислении A['актёр<<A[''игрок'']>>место'] находим строку 'актёр<<A[''игрок'']>>место', и определяем кавычки, включенные в строку. получаем: актёр<<A['игрок']>>место далее здесь есть подвыражения. при вычислении A['игрок'] находим строку 'игрок'. в ней нет кавычек, включенных в строку. то есть при обратных подстановках получаем: $a['поле<<A[''актёр1место'']>>вид'] затем $a['поле2вид'] и далее 'лес'

Byte: noname пишет: причём не помогает делание $A[''актёр<<$A[''игрок'']>>место''] строковой переменной та же ошибка представь что ты ничего не знаешь об этой строке и начинаешь её разбирать.. находишь первую кавычку. считается, что началась строка.. в QSP строка завершается кавычкой, после которой нет ещё одной кавычки (если там 2 подряд кавычки, то это кавычка, включенная в строку).. то есть в твоём примере движок определяет сначала пустую строку '', что сразу же "ломает" дальнейший разбор.. в итоге получаем странные ошибки.

Byte: noname пишет: 'поле11вещь7свойство2'- второе свойство 7-й вещи из тех, что находятся на поле с координатами 1,1 если здесь "поле11" это 2 координаты, то нужно разделить их каким-нибудь символом "_","," ... иначе, к примеру, для строки "поле112" - не ясно, толи это координаты "1,12", толи "11,2".

Byte: noname пишет: и вообще, зря вы так URQL изуродовали. добавили бы всяких функций- и ладно. у QSP и URQ крайне отдалённое сходство. URQL уродлив изначально. повторю, что за поверхностной "простотой" скрывается куча ограничений (я говорю о непосредственно самом языке).

noname: Byte пишет: повторю, что за поверхностной "простотой" скрывается куча ограничений например? я так увидел, что qsp отличается только неудобством языка (чего стоят хотя бы те же кавычки!), добавленными полезными функциями и интерфейсом. очень схожая организация данных, но различный доступ к ним.

Byte: noname, например, в текущем синтаксисе URQL (можно ли формально описать грамматику языка?) невозможно реализовать нормальную работу со строками. могу заверить, что кавычки - это наоборот положительная сторона. кстати, в 5.4 с ними более удобно работать.. "схожая организация" - в отличии от URQ, QSP похож на Basic. в URQ не понятно, где идёт код, а где данные.. всё вперемешку подстановками..

noname: Byte пишет: невозможно реализовать нормальную работу со строками пример? Byte пишет: в URQ не понятно, где идёт код, а где данные.. всё вперемешку подстановками.. в qsp не понятная фигня с этими кавычками, к тому же ты сам убираешь *pl и тебе всё равно понятно, где данные, где код, хотя "x" - она переменная, но в то же время это её вывод на экран. в URQ гораздо удобнее и понятнее. и это не ИМХО. смотри сам: в строчке "поле11вещь7свойство2" я разделяю числа понятными и удобными мне "пояснениями" а ты предлагал: "$свойство['11_7_2']" - где тут понятность? для больших проэктов наглядность и простота критичны- иначе можно запутаться и никогда его не закончить что привлекает как в QSP, так и в URQ- так это "вольности" обращения с данными и подстановки <<>> #$ так же привлекает неструктурность и необъектность языка- на URQ я отдыхаю после дельфей, в которых обязательно всё заранее описывать и заморачиваться с организацией процедур. и ещё по поводу QSP: Byte пишет: представь что ты ничего не знаешь об этой строке и начинаешь её разбирать.. я бы понял, что в выражении 'fhg<<$fhg<<$a>>>>' кавычки соблюдены. начинаем разбор с самого глубокого вхождения (насколько я понял, в ОПЗ ты не переводишь). делаем подстановку переменной $a (тут сложностей не больше, чем если бы вместо <<>> были обычные круглые скобки), допустим, она равна 'qqq'-> подставляем переменную $fhgqqq-> подучаем искомую строку. конечно, одинаковые кавычки открытия и закрытия уменьшают читабельность кода и добавляет головной боли автору языка, конечно двойной знак <<>> не так краток, как #$. НО своими 2*n кавычками во вложениях ты ещё раз показал мне, что QSP- хотя и лучшее, что есть на сегодняшний день, но томится это лучшее в уродливом синтаксисе. Byte пишет: в отличии от URQ, QSP похож на Basic. проги на URQ пожалуй, больше похожи на Basic.

Byte: noname пишет: пример? пример - код: if #aaa$ = sdsdsds sdfsdf then oooo=7 если строка aaa это "sdfsdf<4 then end & " или "sdasd = asdasd" то при подстановке будет: if sdfsdf<4 then end & = sdsdsds sdfsdf then oooo=7 if sdasd = asdasd = sdsdsds sdfsdf then oooo=7 и т.п. аналогично - подстановки среди другого кода.. данные смешались с кодом. как задать строку "asdfasd asdasd & asdasd & if sdsd else" без кавычек? как определить где начало, а где конец строки? noname пишет: а ты предлагал: "$свойство['11_7_2']" - где тут понятность? был предложен и "более понятный" вариант. а если при подстановке в "поле11вещь7свойство2" вместо 11 / 7 / 2 будет строка с пробелом или недопустимым в имени переменной символом - будет ошибка при выполнении. см. 1ый "пример". noname пишет: я бы понял, что в выражении 'fhg<<$fhg<<$a>>>>' кавычки соблюдены. это не логично. идея такова, что внутри << и >> находится выражение. в данном случае $fhg<<$a>>. здесь уже нет строки, поэтому <<$a>> воспринимается как часть выражения. для того, чтобы воспринималось как подвыражение, необходима строковая константа. чтобы сделать то, что ты предлагаешь, необходимо присутствие подвыражений не только для строк, но и для кода. а это уже отрицательно скажется на языке. noname пишет: проги на URQ пожалуй, больше похожи на Basic. смешно :)

noname: Byte пишет: как задать строку "asdfasd asdasd & asdasd & if sdsd else" без кавычек? кавычки в URQ использовать можно. я использовал. строки, подобные твоей пробовал- всегда можно реализовать понятным для интерпретатора способом и вывести что угодно (хотя не знаю, зачем выводить такое) и строка будет простой для понимания и вообще, я не знаю такого случая, когда бы синтаксис URQL помешал сделать что-либо мой же пример более реален. на дельфях ему соотвествуют массивы записей с массивами в них. точнее, не массивы, а какие-нибудь индексированные связанные списки (через указатели) я стремлюсь не напечатать какое-нибудь выражение с невыразимым сочетанием кавычек (кому это нужно?) а реализовать кратко, просто и понятно свою структуру данных. похоже, что в QSP ты хотел, чтоб можно было вывести абсолютно любую строку как можно проще- похвальное желание. но ты увлёкся и переборщил. да, на урке может быть и можно придумать трудновыводимую строку, но это можно обойти (с трудом) на куспели можно (с трудом) работать со структурами данных, аналогичным вышеупомянутым Byte пишет: необходимо присутствие подвыражений не только для строк, но и для кода вот, этого-то QSP и нехватает. URQL хорош свободой программирования в QSP за каким-то непонятным делом её урезают. неужели ты на самом деле думаешь, что проги на QSP понятнее аналогичных на URQL? ну, бэйсик я почти не знаю- спорить не буду и ещё: при отладке "в строке 43 ошибка" - как её найти? пишу потихонечку небольшую прогу на куспели. дело продвигается со скрипом, но хочу разобраться. по-моему rand(1,2) в 75% случаях даёт '1' - буду сделать спец-прогу для проверки рандома.

noname: извиняюсь, с random всёв порядке. просто в моём двумерном массиве несколько раз подряд получилось очень необычное распределение иду вдоль одной строки, и вижу одно и тоже. а зачем jump-у кавычки? при отладке "в строке 43 ошибка" - как её найти?



полная версия страницы