我是脑筋急动的新手,刚开始迈出第一步。我希望有一些帮助找出一个聪明的方法(即使它有点hacky),看看我的指针是否超出界限,然后再去那里。因此,我希望能够看到我在内存数组的第一个单元格,而不是进一步减少指针。我试着谷歌搜索,我找不到任何东西。如果有人有任何想法,即使他们只是纯逻辑而没有代码,我也会很感激。
从许多人看来,如果有人像import Tkinter as tk
from contextlib import contextmanager
@contextmanager
def temp_change(widget, **kargs):
old_values = {key:widget.cget(key) for key in kargs}
widget.config(**kargs)
try:
yield #wait for `with` block to finish executing...
finally:
widget.config(**old_values)
window = tk.Tk()
var = tk.StringVar()
def validate(*args):
print("Validation took place")
return True
entry = tk.Entry(validate="focusin", validatecommand=validate)
print("Entry created. Associating textvariable")
entry.config(textvariable=var)
print("textvariable associated. Changing value")
with temp_change(entry, validate="none"):
var.set("Text")
print("Value changed")
entry.pack()
tk.mainloop()
那样编写一段代码,因为他们只是在内存数组的末尾环绕,那么很多脑筋解释器都不会卡住。然而,其中一些卡住了。所以,如果这是一个非常特定于解释器的问题,让我概括一下:无论现有的位置如何,有没有办法去存储器阵列中的特定位置?
答案 0 :(得分:3)
“无论现有位置如何,有没有办法转到存储器阵列中的特定位置?”
非常简单的回答:没有。
我不是想成为一个聪明的人或任何东西。答案真的很简单。这在BF中根本不可能。你想确保你不出界吗?您必须正确编码,确保您始终能够确定指针的实际位置。
即使您使用“hacky解决方案”编写恰好在一个解释器上运行良好的代码,那么它也不会是一个有效的程序。它不会只运行任何翻译。
在BF中,单元格不可寻址。你必须忍受这个事实。
答案 1 :(得分:2)
使用>
启动代码,使第一个单元格= 0。现在假设其间的数字不是0,您可以使用[<]
返回起始数组。例如,我已经明确地将ASCII字符A-Z映射到单元格2-27,将单元格1保留为0.这样,如果我想打印出一条消息,我会去
> >>>>>>>>.>.[<]
在将数据指针返回到单元格1之前显示hi,从而节省了编写所有<
的时间。
同样,这是假设两者之间的数字不是0。但是,如果您在特定单元格中处理数据并且您知道数据不会达到0,则可以跳回到标记为0的上一个单元格,依此类推。这或多或少类似于批处理文件中的反向结果。
所以假设我有单元数据[0 2 3 4 0 5 3 9 3 2 0 2 3 2 0]
,我们在第3位有数据交换器。我们可以通过执行<[<]<[<]
跳回第一个数组,因为命令将跳过0值,并且重复[<]
直到它到达下一个0.如果需要快速获取代码周围的数据指针,可以使用反向使用相同的想法。最重要的是,以下代码>+++>++>+[<][<][<]
的测试运行将我返回到第一个单元格,尽管有额外的<
,因为括号强制代码跳过,因为单元格1标记为0.({{3 }})
然而正如@Cedric Mamo在他的回答中所说,没有明确的方法可以阻止代码超出界限,因为如果你不小心输入了&lt;在你到达单元格1之后,你走出了界限。除非你按照我上面提到的保护措施进行编程并观察你在做什么,否则没有确切的方法可以防止这种情况发生。