- 1
- 2
- 3
- 4
- 5
- 6
PHP
print 3 --0-- 5 == 8; // Parse error
Java Script
console.log(3 --0-- 5 == 8); // Uncaught SyntaxError: Invalid left-hand side expression in postfix operation
Python
print(3 --0-- 5 == 8) // true
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
0
PHP
print 3 --0-- 5 == 8; // Parse error
Java Script
console.log(3 --0-- 5 == 8); // Uncaught SyntaxError: Invalid left-hand side expression in postfix operation
Python
print(3 --0-- 5 == 8) // true
Именно поэтому я за "PHP" и "Java Script"
KpunoBblu_nemyx 07.02.2020 17:40 # 0
HoBorogHuu_nemyx 07.02.2020 17:45 # 0
Stallman 07.02.2020 20:45 # 0
AnalBoy 07.02.2020 21:30 # 0
phpBidlokoder2 07.02.2020 18:19 # −2
HoBorogHuu_nemyx 07.02.2020 17:59 # 0
Выводит: «TRUE».
https://ideone.com/jsms0G
Stallman 07.02.2020 20:42 # +1
phpBidlokoder2 07.02.2020 21:35 # −2
3.14159265 08.02.2020 01:11 # 0
Так всё алголо- фортано- подобное дерьмо этим старадает.
В лиспах, фортах и коболе инфиксопроблем нет.
KpunoBblu_nemyx 08.02.2020 01:29 # 0
HoBorogHuu_nemyx 08.02.2020 01:44 # 0
3.14159265 08.02.2020 01:45 # 0
KpunoBblu_nemyx 08.02.2020 02:32 # +2
Форт-программа же сама себя парсит и конпелирует:https://ideone.com/Ys1f2d
bormand 08.02.2020 09:18 # +1
HoBorogHuu_nemyx 08.02.2020 09:54 # 0
gostinho 08.02.2020 10:11 # 0
HoBorogHuu_nemyx 08.02.2020 10:48 # 0
gostinho 08.02.2020 10:54 # 0
6og 08.02.2020 15:58 # 0
KpunoBblu_nemyx 12.02.2020 23:11 # 0
Пример же просто, для работы с приоритетами придётся как-то обозначать конец выражения, чтобы отложенные операции выполнить. Да и лень мне.
Хотя, наверное, для более удобного использования лучше придумать для инфиксушни конструкцию по примеру tcl. Что-то типа:
HoBorogHuu_nemyx 12.02.2020 23:49 # +1
На «бухгалтерских» 2+2*2 = 8, потому приоритетов нет.
На «инженерных» 2+2*2 = 6, потому что есть приоритет.
На калькуляторах с ARE арифметические выражения выглядят так же, как на «инженерных», разница будет только в выражениях с тригонометрическими функциями, логарифмами и т. п.
На калькуляторах с RPN запись будет выглядеть по-другому. Например, 2↑2↑2+* = 8; 2↑2↑2*+ = 6; 2↑2+2* = 8; 2↑2*2+ = 6.
Как это работает?
У калькуляторов с RPN стек один: для чисел. Знак двухместной операции (+, -, *, /) немедленно достаёт из стека два числа, производит с ними вычисления и результат кладёт в стек.
У бухгалтерских и у инженерных калькуляторов стека два. Второй стек — для операций. Разница между ними в том, что у бухгалтерского знак операции всегда достаёт из стека знак предыдущей операции и два числа и производит над ними вычисления, а у инженерного предварительно производится сравнение приоритетов. Если у предыдущей операции приоритет ниже, то всё движется дальше в стек и ничего не вычисляется. Если же у прерыдущей операции приоритет выше, то производятся вычисления, как на бухгалтерском.
Реальный пример: 2 + 2 * 2 =
2 // кладём в стек двойку
+ // кладём во второй стек +
2 // кладём в стек двойку
* // приоритет + ниже, чем у * => кладём в стек *
2 // кладём в стек двойку
= // извлекаем из второго стека знаки операций и производим вычисления, пока второй стек не опустеет
// извлекли * => считаем 2 * 2
// извлекли + => считаем 2 + 2
Второй реальный пример: 2 * 2 + 2 =
2 // кладём в стек двойку
* // кладём во второй стек *
2 // кладём в стек двойку
+ // приоритет * выше, чем у + => извлекаем из второго стека *, вычисляем 2*2, кладём во второй стек +
2 // кладём в стек двойку
= // извлекаем из второго стека +, вычисляем 4 + 2
guest8 13.02.2020 00:03 # −999
KpunoBblu_nemyx 13.02.2020 00:22 # +1
Кстати, в форте можно было бы использовать стек развратов как стек для опереторов, но стандартизаторы из-за большого обилия видов промежуткого кода придумали какую-то хуню в виде xt (execution term) вместо указателей на код, но не стандартизировали как получить по нему собсно адрес кода, и совать его в стек развратов не везде проканает. Как вариант решения: оператор перед выполнением опереции может сам заглядывать вперёд и вызывать следующий оператор, если его приоритет выше, так "операция" (адрес разврата) сама на стеке останется.
bormand 13.02.2020 07:35 # +1
Стек на джва числа... А зачем им стек операций если нет приоритетов - х.з.
HoBorogHuu_nemyx 13.02.2020 08:37 # 0
bormand 13.02.2020 11:34 # +1
3.14159265 08.02.2020 01:02 # 0
Иначе выражение-будет-воспринято-как-единое-целое.
Desktop 08.02.2020 01:08 # 0
3.14159265 08.02.2020 01:16 # 0
HoBorogHuu_nemyx 08.02.2020 01:18 # +1
3.14159265 08.02.2020 01:35 # 0
В принципе баш с его педерачей данных через пайпы тоже в своем роде монадичен.
guest8 08.02.2020 01:46 # −999
gostinho 08.02.2020 01:55 # +2
1024-- 08.02.2020 19:37 # +1
Desktop 08.02.2020 01:18 # +1
Пример (отсюда - https://www2.cs.arizona.edu/icon/docs/ipd266.htm):
String analysis functions such as find() can be used in string scanning. In this context, the string that they operate on is not specified and is taken to be the subject. For example,
writes all the substrings of line prior to occurrences of "or". Note that find() produces a position, which is then used by tab() to change the position and produce the desired substring. The move(2) skips the "or" that is found.
3.14159265 08.02.2020 01:20 # +1
Мне обычно grep | awk | sed хватает для подобных вещей.
Как я понял они заявляют что их главные киллер-фича — обработка ошибок и ультракороткая обработка строк.
Ну думаю какой-нибудь хаскель с монадами его уделает по краткости и выразительности.
guest8 08.02.2020 01:25 # −999
KpunoBblu_nemyx 08.02.2020 01:27 # 0
KpunoBblu_nemyx 08.02.2020 01:25 # +1
Ещё в иконе исполнения зависит от успех/не успех предыддущей опереции, как в комменте децктопа выше.