gnuplot: Вычисление квадратного корня

Ну, он распутывается по одному слою за раз:

X{{a..c},{1..3}}Y

задокументировано как расширенное до X{a..c}YX{1..3}Y(, которое X{A,B}Yрасширено до XAXB, где Aявляется {a..c}и Bявляется {1..3}), сами по себе задокументированы как расширенные доXaYXbYXcYX1YX2YX3Y.

Что, возможно, стоит задокументировать, так это то, что они могут быть вложены друг в друга (, что первый }не закрывает первый {там, например ).

Я полагаю, что оболочки могли решить сначала разрешить внутренние фигурные скобки, например, воздействуя на каждое закрытие }по очереди:

  1. X{{a..c},{1..3}}
  2. X{a,{1..3}}YX{b,{1..3}}YX{c,{1..3}}Y

    (, то есть A{a..c}Bрасширяется до AaBAbBAcB, где A— это X{, а B— это,{1..3}Y)

  3. X{a,1}YX{a,2}YX{a,3}YX{b,1}YX{b,2}YX{b,3}YX{c,1}YX{c,2}YX{c,3}Y

  4. XaYX1YXaYXa2...

Но я не нахожу это особенно более интуитивным или полезным (см., например, пример Кевина в комментариях ), все равно будет некоторая двусмысленность в отношении порядка, в котором будут выполняться расширения, и это не какcsh(оболочка, которая ввела растяжку в конце 70-х годов, а форма {1..3}появилась позже (1995 )от zshи {a..c}еще позже (2004 )отbash)сделал это.

Обратите внимание, чтоcsh(с самого начала, см. 2BSD (1979 )man-страницу)документировал тот факт, что расширения фигурных скобок могут быть вложенными,хотя явно не сказано, как будут расширены вложенные скобки. Но вы можете посмотреть код cshот 1979 года , чтобы увидеть, как это делалось тогда. Посмотрите, как он действительно явно обрабатывает вложенность и как она разрешается, начиная с внешних фигурных скобок.

В любом случае, я действительно не понимаю, какое значение имеет расширение {a..c},{1..3}. Там ,не является оператором раскрытия фигурных скобок (, так как он не находится внутри фигурных скобок ), поэтому обрабатывается как любой обычный символ.

0
03.10.2019, 19:11
1 ответ

Если вы хотите, чтобы gnuplotпоказывал вам результат извлечения квадратного корня, используйте функцию print()любым из следующих способов:

> print(sqrt(4));

или

> a=sqrt(4);print(a);

или

> a=4;print(sqrt(a));

1
28.04.2021, 23:28

Теги

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