以下程序引发错误:
import curses
def test(scr):
  top = curses.newwin(1, 10, 0, 0)
  top.addstr(0, 9, "X")
curses.wrapper(test)
Run Code Online (Sandbox Code Playgroud)
看起来每当我尝试使用addstr()在窗口的最后一行的最后一列中写入一个字符时(即使它小于屏幕),它会引发错误.我不想滚动,我不关心光标的位置.我想要的只是能够在窗口的每个位置写字符.有可能吗?我怎样才能做到这一点?
我想从一组约50种不同的属性中将属性附加到我的术语中.通常只有一小部分用于给定的术语.有很多方法可以表示这些属性,但我对它们中的任何一个都不满意.
为了便于讨论,这里有一组属性及其可能的值:
hair: bald, blonde, brune, red
eyes: blue, green, brown
first_name: John, Dick, Harry
Run Code Online (Sandbox Code Playgroud)
有许多方法可以表示这些属性,例如使用对列表:
[eyes-blue, hair-blonde]
Run Code Online (Sandbox Code Playgroud)
似乎唯一有效的表示是使用一个非常长的列表,其中每个索引用于特定属性:
?- T1=[blonde,_,_], T2=[_,blue,_], T1=T2.
T1 = T2, T2 = [blonde, blue, _1266]
?- T1=[X,_,_], X=blue.
T1 = [blue, _1230, _1236],
X = blue
Run Code Online (Sandbox Code Playgroud)
但它有50个属性是不可读的,并且非常错误(在我的情况下,一整套谓词专用于每个属性,有时属于属性的每个值).
我使用这种功能的方式是使条件如"条款T1和T2具有相同的属性X值",或"条款T1和T2相同",其中T1和T2具有可在其他地方设置的属性,或者可以不设置.
使用dicts不起作用,因为未设置的密钥被认为是不存在的:
?- T1 = _{eyes:blue, hair:blonde}, T2 = _{eyes:blue}, T1 = T2.
false.
Run Code Online (Sandbox Code Playgroud)
为了实现这一点,我需要使用带有自由变量的50个(大多数是不相关的)属性来初始化每个术语,并且有可能会使用其中一些.
我还有其他选择吗?如果有更接近我的需求而不是prolog,我愿意使用不同的逻辑编程语言.