gpt4 book ai didi

postscript - 您如何保持 `roll` 运算符的正确性?

转载 作者:行者123 更新时间:2023-12-03 15:05:31 29 4
gpt4 key购买 nike

在后记中,roll运算符非常笼统,难以形象化。你如何确保你在正确的方向上滚动?

我想在 roll 上得到一个可靠的句柄因为我希望能够使用变量来转换函数

/f { % x y z
/z exch def
/y exch def
/x exch def
x dup mul
y dup mul
z dup mul add add % x^2+y^2+z^2
} def

使用堆栈操作进入函数,更像是
/f { % x y z
3 1 roll dup mul % y z x^2
3 1 roll dup mul % z x^2 y^2
3 1 roll dup mul % x^2 y^2 z^2
add add % x^2+y^2+z^2
} def


/f { % x y z
3 { 3 1 roll dup mul } repeat
2 { add } repeat % x^2+y^2+z^2
} bind def

这些都应该通过减少名称查找(哈希表搜索)来更快地执行。

roll我总是要测试一下;我通常
第一次尝试就错了!不过我对交易所没意见

最佳答案

我在很长一段时间内都难以滚动。我记得现在使用这些方式,它们都是等价的:
韵 (-ish)

n j roll


  • 正 j,滚开
    7 8 9  3 1 roll
    % 9 7 8
  • 否定,取回(或“否定,然后检索”)
    % 9 7 8
    3 -1 roll
    % 7 8 9

  • 堆(东西)
    也许更好的思考方式是物理堆栈
    (例如书籍)所以堆栈的顶部实际上是“在顶部”。
    然后一个积极的滚动上升:
       for j number of times     pick up n books     put the top one on the bottom (shifting the substack "up")     put them back down

    And a negative roll goes down:

       for j number of times     pick up n books     put the bottom one on top (shifting the substack "down")     put them back down

    sideways

    But I usually picture the stack sideways, the way the objectswould look in a file as a sequence of literals. So I think ofthe positive roll as stashing the top j things behind the nththing; and the negative roll as snagging j things startingwith the nth thing. Give and Take.

    Away.

    n j roll

    __ j > 0 __ move top j elements to the bottom of n

    n TOS
    -------------|
    | j |
    | -----|
    | | |
    V V |

    a b c d e f g h

    ^ | |
    | |-------|
    ^ |
    -<-<-<-<-<-
    move
    然后回来。
    __ j < 0 __   move j elements from the bottom of n to the top

    n TOS
    -------------|
    | j |
    |----- |
    | | |
    V V |

    a b c d e f g h

    | | ^
    |-------| |
    | ^
    ->->->->->-
    move

    Lint 滚筒
    还有一种方法是把它画到一边,然后在上面放一个粘轮(可能是一个 Lint 滚筒)
    (a) (b) (c) (d) (e) 5 3 roll           _______          /       \          |   3   |          | / | \ |          \_______/ (a) (b) (c) (d) (e)

    Then a positive roll goes counterclockwisejust like arc and rotate.

           _______ (e)      /     / \      |   3 --| (d)      |     \ |      \_______/ (c) (a) (b)   (e)__(d)__(c)     /\  |  /\     |   3   |     |       |     \_______/   (a) (b)   (c)_______     /\      \ (d) |-- 3   |     |/      |     \_______/  (e) (a) (b)    _______   /       \   |   3   |   | / | \ |   \_______/ (c) (d) (e) (a) (b)

    And a negative roll goes clockwiselike arcn and a negative rotation.

        _______   /       \   |   3   |   | / | \ |   \_______/ (a) (b) (c) (d) (e)   (a)_______     /\      \ (b) |-- 3   |     |/      |     \_______/  (c)       (d) (e)   (c)__(b)__(a)     /\  |  /\     |   3   |     |       |     \_______/   (d) (e)       _______ (c)      /     / \      |   3 --| (b)      |     \ |      \_______/ (a) (d) (e)           _______          /       \          |   3   |          | / | \ |          \_______/ (d) (e) (a) (b) (c)

    eliminate the negative

    It shouldn't be difficult to see that negative rolls are entirely unnecessary because if j<0, it can be replaced by n-j. eg.

    3 -1 roll  % roll bottom 1 element from 3 to the top
    3 2 roll % roll top 2 elements behind the 3rd
    是一样的。
    16 -4 roll  % roll bottom 4 elements from 16 to the top
    16 12 roll % roll top 12 elements behind the 16th
    是一样的。

    这会导致最终的、最终的简化 View (尽管上述每个方法也都有效)。
    滚动只是一个大交换
    您实际上只是将前 j 个元素与下面的 n-j 个元素交换。
    假设您在堆栈上有这个乱七八糟的东西(其中 $TOS$ 标记堆栈的顶部),并希望对其进行正确排序:
    g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z  a  b  c  d  e  f $TOS$
    向上(向下)计数 n 和 j。
    g  h  i  j  k  l  m  n  o  p  q  r  s  t  u  v  w  x  y  z  a  b  c  d  e  f
    26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
    | | j = 6 . . . .
    | n = 26 . . . . . . . . . . . . . . . . . . . . . . .

    > 26 6 roll pstack

    a b c d e f g h i j k l m n o p q r s t u v w x y z
    j 的负值只是将分割线相对于 n 个元素中最深的元素定位(它从下面开始计数)。
    t  u  v  w  x  y  z  a  b  c  d  e  f  g  h  i  j  k  l  m  n  o  p  q  r  s
    26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1
    . . . . j = -7 | |
    . . . . . . . . . . . . . . . . . . . . . . . n = 26 |

    > 26 -7 roll pstack

    a b c d e f g h i j k l m n o p q r s t u v w x y z

    这是一个方便的函数,它提供了一个更类似于 的滚动界面。大交换查看。
    % r0..rN  s0..sM  N  M   swap   s0..sM  r0..rN
    % a gentler interface to the power of roll
    /swap {
    exch 1 index add exch
    roll
    } def
    0 1 2 3 /a /b /c 4 3 swap pstack
    输出:
    GPL Ghostscript 8.62 (2008-02-29)
    Copyright (C) 2008 Artifex Software, Inc. All rights reserved.
    This software comes with NO WARRANTY: see the file PUBLIC for details.
    3
    2
    1
    0
    /c
    /b
    /a
    GS<7>GS<7>

    关于postscript - 您如何保持 `roll` 运算符的正确性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15997536/

    29 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com