像你们这些人一样,我经常用几种语言写作.当涉及到规划的东西,(甚至回答一些SO问题)时,我实际上是用一些未指明的混合语言来思考和写作.虽然我曾经被教导要做到这一点使用流程图或UML类图,现在回想起来,我觉得"我的"伪语言具有的成分C,Python,Java,bash,Matlab,perl,Basic.我似乎无意识地选择了最适合表达概念/算法的成语.
常见的习语可能包括范围类似Java的括号,pythonic列表推导或缩进,继承C++,C#-style lambdas,类似matlab的切片和矩阵运算.
我注意到,人们很容易认识到我正在试图做什么,并且人们很容易智能地翻译成其他语言.当然,这一步涉及考虑角落案例,以及每种语言特殊行为的时刻.
但在现实中,大多数这种语言的交流关键字和库函数通常表现相同的一个子集-数学函数,类型名称,while/ for/ if等显然,我不得不像排除口齿不清,APL衍生许多"奇"的语言,但...
所以我的问题是,
是否已存在识别文本文件编程语言的代码?(当然,这必须是比eclipse的语法树更简单的任务,或者比谷歌翻译的语言猜测功能,对吧?)事实上,SO语法荧光笔是否做了这样的事情?
从理论上讲,创建单个解释器或编译器是否可以识别您在任何时刻使用的语言习惯用语(可能是"智能地")执行或转换为可运行的表单.并标记我的语法在行为方面不明确的极端情况.我看到的直接困难包括:知道何时在依赖于缩进和依赖于支撑的模式之间切换,识别有趣的运算符(如*pointervs *kwargs)以及知道何时使用列表与类似数组的表示.
是否存在可以管理这种灵活口译的语言或口译?
我是否错过了明显的障碍?
谢谢大家的回答和想法.我打算写一个基于约束的启发式翻译可能,可能,"解决"代码的本意并转化为真正的Python代码.它将注意到来自许多常用语言的关键词,并将使用句法线索来消除人类意图的歧义 - 如间距,括号,可选的帮助词,let或者then,变量以前使用的上下文等,以及常见约定的知识(如资本名称,我迭代,和变量/方法例如包含单词的命名的一些简单的有限的了解get,asynchronous,count,last,previous,my等等).在真正的伪代码中,变量命名与操作本身一样丰富!
使用这些线索,它将创建关于每个操作的实现的假设(如基于0/1的索引,何时应该捕获或忽略异常,什么变量应该是const/global/local,从哪里开始和结束执行,以及什么位应该在单独的线程中,注意数字单位匹配/需要转换时).每个假设都具有给定的确定性 - 程序将列出每个语句的假设,因为它哄骗你写入可执行文件的内容!
对于每个假设,如果您不喜欢初始解释,您可以"澄清"您的代码.图书馆问题非常有趣.我的翻译器就像一些IDE一样,将读取所有模块中可用的所有定义,使用一些关于哪些类/方法最常使用和在什么情况下使用的统计数据,并且只是猜测!(给程序添加一个注释,说明为什么会这样猜测......)我想它应该尝试执行所有操作,并警告你不喜欢它.它应该允许任何内容,但是如果你是模棱两可的,请让你知道几种替代解释是什么.
它肯定还需要一段时间才能管理像@Albin Sunnanbo这样不寻常的ImportantCustomer例子.但是我会告诉你我是怎么过的!
language-agnostic algorithm interpreter artificial-intelligence pseudocode
如何查看MATLAB中定义的全局变量列表?(我正在使用R2009a).
我已经在Google和SO上为此进行了无用的搜索,所以如果之前有人问过道歉的话.
我正在玩python ast(抽象语法树).
我写了以下内容,它访问了AST的所有节点.
import ast
class Py2Neko(ast.NodeVisitor):
def generic_visit(self, node):
print type(node).__name__
ast.NodeVisitor.generic_visit(self, node)
def visit_Name(self, node):
print 'Name :', node.id
def visit_Num(self, node):
print 'Num :', node.__dict__['n']
def visit_Str(self, node):
print "Str :", node.s
if __name__ == '__main__':
node = ast.parse("a = 1 + 2")
print ast.dump(node)
v = Py2Neko()
v.visit(node)
Run Code Online (Sandbox Code Playgroud)
然后为Py2Neko类添加了一些方法
def visit_Print(self, node):
print "Print :"
def visit_Assign(self, node):
print "Assign :"
def visit_Expr(self, node):
print "Expr :"
Run Code Online (Sandbox Code Playgroud)
但是当它遇到一个"打印"声明或一个表达或一个表达时,它似乎停止了,而不是更进一步.
它输出:
Module(body=[Assign(targets=[Name(id='a', ctx=Store())], value=BinOp(left=Num(n=1), op=Add(), right=Num(n=2)))])
Module
Assign …Run Code Online (Sandbox Code Playgroud) 在Matlab中,我们可以像这样折叠数组的维度:
M = rand(3,4,5);
myvec = M(:); % gives a 60-element vector
Run Code Online (Sandbox Code Playgroud)
我认为它被称为序列化或扁平化.元素的顺序首先是dim1,然后是dim2,然后是dim3 - 所以你得到了[M(1,1,1); M(2,1,1); M(3,1,1); M(1,2,1); ...].
但我想要做的就是沿着前两个维度崩溃:
mymatrix = M( :: , : ); % something that works like this?
Run Code Online (Sandbox Code Playgroud)
给出12 x 5矩阵.所以,例如,你得到
[M(1,1,1) M(1,1,2) M(1,1,3) M(1,1,4) M(1,1,5)
M(2,1,1) M(2,1,2) M(2,1,3) M(2,1,4) M(2,1,5)
M(3,1,1) M(3,1,2) M(3,1,3) M(3,1,4) M(3,1,5)
M(1,2,1) M(1,2,2) M(1,2,3) M(1,2,4) M(1,2,5)
...
]
Run Code Online (Sandbox Code Playgroud)
因此第一个维度mymatrix是原件的"扁平"第一和第二维M,但保留了任何其他尺寸.
我实际上需要为5维数组的"中间3维"做这个,所以一般的解决方案会很棒!例如,W=rand(N,N,N,N,N); mymatrix = W( :, :::, : )应该给N x N^3 x N …
我正在编写一个JAGS脚本(分层贝叶斯模型),其中事件的时间被建模为两个进程之间的竞争.
观察: time是事件的测量时间.
模型:具有高斯率的两个过程 - 无论哪个过程首先触发事件.
目标:估算两个过程的比率.
model{
# Priors
mu1 ~ dnorm( 0,1 ) # rate of one process
mu2 ~ dnorm( 0,1 ) # rate of other process
sigma1 <- 1 # variability in rate
sigma2 <- 0.1 # variability in rate
# Observations
for (i in 1:N)
rate1[i] ~ dnorm( mu1, sigma1 ) # Sample the two
rate2[i] ~ dnorm( mu2, sigma2 ) # racing processes.
rmax[i] <- max( rate1[i], rate2[i] ) …Run Code Online (Sandbox Code Playgroud) 第一次使用stackOverflow.:)
我正在尝试使用mathematica来解决一些简单的多项式方程(假设在一个变量中),并对变量进行约束,例如|x| < 1.
当我尝试这样的事情:
Solve[x^2 == 4 && x^2 < 1, x]
Run Code Online (Sandbox Code Playgroud)
我得到一个错误,指出"x> 0不是一个格式良好的方程式".
mathematica求解页面甚至在倒数第二个例子中提出了这种语法,所以我很困惑.(如果相关,我有版本7.)任何帮助将不胜感激.
谢谢!
我读了这个。 如何在 VS Code 中配置 python 大纲模式以仅显示类和方法
但 VS Code 1.40.0 还不能做到。Spyder 几乎可以做到,但我想使用 VS Code。我想做的只有一件事。
我可以以某种方式让 VS Code 显示吗
# %% Top hierarchy
def abc():
# %% Top hierarchy
def xyz():
Run Code Online (Sandbox Code Playgroud)
作为
Top hierarchy
abc
Top hierarchy
xyz
Run Code Online (Sandbox Code Playgroud)
概要?
或者我应该等待下一个版本?
我在Windows下运行Matlab 7.8.0.
我正在调用一个外部实用程序,使用dos()它在当前目录中创建一个文件.我该文件是正确创建的,但它不能被看到exist或fopen,这回0和-1分别.文件名是正确的!
>> pwd
ans =
I:\
>> ls
file1.asc file2.asc file3.asc
>> exist('file1.asc') % this file was there before
ans =
2
>> exist('file2.asc') % this file is newly created
ans =
0
Run Code Online (Sandbox Code Playgroud)
确认它不是奇怪/有问题的文件名,我从Cygwin shell检查:
/cygdrive/i/ $ if [ -f file2.asc ]; then echo "OK"; fi
OK
Run Code Online (Sandbox Code Playgroud)
所以文件很好.我尝试重命名它
/cygdrive/i/ $ mv file2.asc test
Run Code Online (Sandbox Code Playgroud)
在Matlab中
>> ls
file1.asc file3.asc test
>> exist('test')
ans =
0
Run Code Online (Sandbox Code Playgroud)
如果我退出并重新启动Matlab它工作正常.但我需要动态创建文件然后访问它!
我在python中使用(适度)大型复杂结构化数据对象.这是我从json导入的东西,所以它是dicts和列表的层次结构.数据在在线json分层浏览器中看起来很可爱.但是我在Python中导航它时遇到了麻烦.
如果我输入
pprint(data)
Run Code Online (Sandbox Code Playgroud)
它在控制台中为我提供了30页的输出.如果我只想列出例如树的前两个级别怎么办?因此,例如,如果我有一个dicts列表(例如,每个都有几个键包含几个列表的键列表),并且在最低级别有数字和字符串.
如何(以文本形式)显示更高级别的部分?
与此同时,我采用了具有树视图的IDE.但肯定有可能在控制台中?这一定是一个长期存在的问题 - 人们需要一直这样做吗?
有谁知道为什么这在MATLAB中有效?
>> 1 ++ 2
ans =
3
Run Code Online (Sandbox Code Playgroud)
来自C,python,Java等编码,我觉得最有效的是它应该可以工作.据推测,解析器有一些重要的东西我不明白?
我有两个矩阵A和B我想繁殖,但它们包含nan秒.
默认乘法会nan放下结果的整列,其中nan数据中只有一个.我想忽略它们,比如nansum/ nanmeanetc do.换句话说,而不是计算
sum( A(i,j) * B(j,k) )
Run Code Online (Sandbox Code Playgroud)
我想要它使用nansum.
我想这是可能通过更换nan用0,然后相乘,但其点nansum是消除了吧?
我正在尝试关闭MATLAB中的所有图形窗口。
我用过
close all
Run Code Online (Sandbox Code Playgroud)
但这会打开所有方差分析表!
还有办法关闭所有这些吗?
有没有办法找出一个函数将采用多少个参数?
像这样?
f = @(x,y,z) x+y+z;
numargs( f )
ans =
3
Run Code Online (Sandbox Code Playgroud)
我知道很多功能都可以varargin,所以也许会返回inf或者其他东西.