对于我的计算语言类的理论,我们得到了一个家庭作业,用一种语言来实现一段代码,该语言只有流控制的while语句(没有if语句).这主要是为了证明你可以只使用while循环编写图灵完备语言.
对于那些能理解语言语法的人,以下是语言规则:
S -> S;S | while C do S od | id := E
E -> E + T | T | E - T
T -> T * F | F | F / T
F -> id | cons | (E)
C -> E = E | E > E | E < E | E >= E | E <= E | E != E | C and C | C or C | not(C)
Run Code Online (Sandbox Code Playgroud)
这是从我的班级笔记中复制的,所以如果缺少或不正确,请不要责怪我! …
我没有意识到这一点,但显然and和or关键字不是运营商.它们不会出现在python运算符列表中.出于纯粹的好奇心,这是为什么?如果他们不是运营商,他们究竟是什么?
例如,在Python中,如果我想获取对象的所有属性,我可以做这样的事情:
>>> import sys
>>> dir(sys)
['__displayhook__', '__doc__', '__excepthook__', '__name__', '__package__', '__stderr__', '__stdin__', '__stdout__', '_clear_type_cache', '_current_frames', '_getframe', 'api_version', 'argv', 'builtin_module_names', 'byteorder', 'call_tracing', 'callstats', 'copyright', 'displayhook', 'dont_write_bytecode', 'exc_clear', 'exc_info', 'exc_type', 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info', 'getcheckinterval', 'getdefaultencoding', 'getdlopenflags', 'getfilesystemencoding', 'getprofile', 'getrecursionlimit', 'getrefcount', 'getsizeof', 'gettrace', 'hexversion', 'maxint', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'ps1', 'ps2', 'py3kwarning', 'pydebug', 'setcheckinterval', 'setdlopenflags', 'setprofile', 'setrecursionlimit', 'settrace', 'stderr', 'stdin', 'stdout', 'subversion', 'version', 'version_info', 'warnoptions']
Run Code Online (Sandbox Code Playgroud)
或者,如果我想查看某些内容的文档,我可以使用帮助功能:
>>> help(str)
Run Code Online (Sandbox Code Playgroud)
有没有办法在Ruby中做类似的事情?
有没有真正的理由不在 C++中使成员函数虚拟化?当然,总会存在性能参数,但由于虚函数的开销相当低,因此在大多数情况下似乎并不存在.
在另一方面,我已经被咬了好几次与遗忘做一个功能的虚拟那应该是虚拟的.这似乎是一个比表现更大的争论.那么有没有理由不默认将成员函数设为虚拟?
我正在查看hasattr内置函数的源代码,并注意到一些引起我兴趣的行:
Py_INCREF(Py_False);
return Py_False;
...
Py_INCREF(Py_True);
return Py_True;
Run Code Online (Sandbox Code Playgroud)
不是Py_False和Py_True全球价值观?出于纯粹的好奇心,为什么Python保留这些变量的引用计数?
我想编写一个使用Python的smtplib发送电子邮件的程序.我搜索了文档和RFC,但找不到任何与附件相关的内容.因此,我确信我错过了一些更高级别的概念.有人能告诉我附件如何在SMTP中工作吗?
我似乎错过了一些关于LINQ的东西.对我来说,看起来它正在采用我最喜欢的SQL的一些元素,并将它们转移到C#语言中并将它们用于其他事情.
我的意思是,我可以看到在数据库以外的东西上使用类似SQL的语句的好处.但是,如果我想编写SQL,那么,为什么不编写SQL并将其保留在C#之外呢?我在这里错过了什么?
所以我有一个指针数组的指针.如果我这样删除它:
delete [] PointerToPointers;
Run Code Online (Sandbox Code Playgroud)
那会删除所有指向的指针吗?如果没有,我是否必须遍历所有指针并删除它们,或者有更简单的方法吗?我的google-fu似乎没有给我任何关于这个问题的好答案.
(是的,我知道我需要使用一个向量.这是学校中"赶上C++"类型作业之一.)
显然,对于Python是否需要尾调用优化,存在很大的争议.当有人向Guido发送SICP副本时,这个问题就出现了,因为他没有"得到它".我和Guido在同一条船上.我理解尾调用优化的概念.我真的想不出Python真正需要它的任何理由.
为了让我更容易理解,有人可以给我一些代码片段,使用TCO可以大大简化吗?
我想用Lisp方言实现一个Lisp解释器,主要是作为一种学习练习.我被抛弃的一件事就是这个领域有多少选择.首先,我对学习一段时间内的一些Lisps(如Scheme或Common Lisp)更感兴趣.我不想使用Clojure为我已经使用它的纯粹事实这样做.:-)
在解析时,其中一种口味比其他口味更好吗?你认为在Common Lisp中实现Scheme是一个好主意(反之亦然)?或者两者之间是否会有足够的差异让我失望?
如果它有所不同,我想要一些跨平台的东西.我有一台Windows PC,一台Mac机和一个Linux机箱,我最终可以在其中任何一个上写这个.