我正在编写一个包含大量重复内容的Makefile,例如
debug_ifort_Linux:
if [ $(UNAME) = Linux ]; then \
$(MAKE) FC=ifort FFLAGS=$(difort) PETSC_FFLAGS="..." \
TARGET=$@ LEXT="ifort_$(UNAME)" -e syst; \
else \
echo $(err_arch); \
exit 1; \
fi
Run Code Online (Sandbox Code Playgroud)
在定义目标'syst'的地方,定义了变量'UNAME'(通常是Linux,但也可能是Cygwin或OSF1),并且还定义了变量'difort'和'err_arch'.这段代码对于不同的编译器目标使用了很多次(使用名称约定'").由于这是一个庞大的冗余代码,我希望能够以更简单的方式编写它.例如,我想做这样的事情:
debug_ifort_Linux:
compile(uname,compiler,flags,petsc_flags,target,lext)
Run Code Online (Sandbox Code Playgroud)
其中compile可以是一个基于参数执行上述代码的函数.有谁知道我怎么能做到这一点?
在书籍中搜索了一段时间后,在stackoverflow和一般网络上,我发现很难找到对fortran参数意图之间真正差异的直接解释.我理解它的方式是这样的:
intent(in)
- 实际参数被复制到条目处的伪参数.intent(out)
- 伪参数指向实际参数(它们都指向内存中的相同位置).intent(inout)
- 伪参数在本地创建,然后在过程完成时复制到实际参数.如果我的理解是正确的,那么我也想知道为什么人们想要使用intent(out)
,因为intent(inout)
需要更少的工作(不复制数据).
问题很简单,如标题所述:以下两个表达式之间的区别是什么?
$(...)
`...`
Run Code Online (Sandbox Code Playgroud)
例如,有两个变量test1
和test2
不同?
test1=$(ls)
test2=`ls`
Run Code Online (Sandbox Code Playgroud) 我想在fortran写入标准输出而不添加换行符.也就是说,我想做这样的事情:
a='some string and '
b='some other string'
write(*,101) a
...
write(*,102) b
...
101 format(a,...)
102 format(a)
Run Code Online (Sandbox Code Playgroud)
是否可以使用某种格式语句来抑制101中的换行符,以便代码在同一输出行上输出"some string and some other string"?
请注意,两个写语句是分开的很重要,因为其间的代码实际上用于生成第二个字符串.
我想以可读的方式打印列表.我使用循环遍历每个元素并创建一个用逗号和换行符格式化的新列表.问题是在输出的第一行,我想要一个标题.例如,我想打印这样的东西:
List: red, green, blue, black, cars,
busses, ...
Run Code Online (Sandbox Code Playgroud)
问题是在第二行和后续行中创建缩进.我希望缩进具有给定的长度.因此,问题减少到创建给定长度的空行.也就是说,我想要一个create_empty_line_of_length
输出给定空间量的函数.
length=5
echo "start:$(create_empty_line_of_length $length) hello"
Run Code Online (Sandbox Code Playgroud)
在这种情况下输出应该是:
start: hello
Run Code Online (Sandbox Code Playgroud)
有谁知道如何做到这一点?
我最近开始学习lisp,主要使用clisp和vim.我也想尝试sbcl,因为这通常被推荐为最好的免费lisp编译器之一.但有一件事让sbcl对我来说更难用:我无法在REPL中获得自动完成功能,我在clisp中也有.也就是说,当我启动sbcl并键入以下内容时(作为示例),
* (requi<tab>
Run Code Online (Sandbox Code Playgroud)
<tab>
文字制表符字符在哪里,我没有得到完成列表,而是一个冗长的制表符.在clisp中,<tab>
将完成前一行* (require
.
由于我对lisp相当新,clisp中的自动完成功能非常方便,所以如果有人能解释如何在sbcl中获取它,那将非常方便.
我有一个简单的脚本,用于启动另一个程序.这个其他程序有时会产生一个SIGSEGV
,这会破坏我的输出.因此,我添加了几行,这些行应该暂时重定向stderr
到/dev/null
,以便SIGSEGV
忽略它.以下是我的代码草稿:
exec 2> /dev/null
progname >& ./tmp/run.txt && run_status='OK'
exec 2>1
Run Code Online (Sandbox Code Playgroud)
问题是最后一行不能满足我的要求.第一行显然有效,并重定向stderr
.最后一行应该返回stderr
到之前的位置(我只假设它是相同的stdout
).
任何帮助都会得到满足!
我创建了一个非常简单的python脚本:
def read_then_follow(file):
for line in file:
yield line
while True:
line = file.readline()
if not line:
time.sleep(1.0)
continue
yield line
for line in read_then_follow("some_file.txt"): print line
Run Code Online (Sandbox Code Playgroud)
文件"some_file.txt"包含几行文本,在运行脚本时将写入屏幕.如果我随后在文件中添加一行echo "line" >> some_file.txt
,该行将在1秒内打印到屏幕上.但是:如果我在vim中打开文件,在底部添加一行并保存,脚本将停止运行.它既不会将用vim写入的新行写入屏幕,也不会对其他echo ...
命令进行响应.
为了您的信息,我目前在Ubuntu 10.10上使用python 2.6.6.
Sympy似乎无法简化涉及变量的平方的平方根的表达式:
In [28]: a = x**2
In [29]: b = a**(1/2)
In [30]: b
Out[30]:
0.5
? 2?
?x ?
In [31]: b.simplify()
Out[31]:
0.5
? 2?
?x ?
Run Code Online (Sandbox Code Playgroud)
我不认为这与其他变体有关simplify
,特别是我认为b.powsimp()
应该有效.
In [32]: b.powsimp()
Out[32]:
0.5
? 2?
?x ?
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么这不起作用,或者我做错了什么?
我有一个字典,让我们myDict
在Python中调用它,它包含一组类似的字典,它们都有条目" turned_on : True
"或" turned_on : False
".我想删除所有myDict
关闭的条目,例如" turned_on : False
".在Ruby中我会做这样的事情:
myDict.delete_if { |id,dict| not dict[:turned_on] }
Run Code Online (Sandbox Code Playgroud)
我应该如何在Python中执行此操作?
我想在我的一些代码中注释掉行.我有不同类型的代码,他们使用不同的评论领导者.例如乳胶:'%',在Fortran 90中:'!' 在python中:'#'.我想做一个看起来像这样的替换命令:
:g/<search-string>/s/^/<add-comment-leader-here>/
Run Code Online (Sandbox Code Playgroud)
如果可以,我还可以在Vim中创建一个自动注释掉所选文本的命令.像这样的东西:
vmap <z> :'<,'>s/^/<add-comment-leader-here>/
Run Code Online (Sandbox Code Playgroud)
欢迎任何想法!:)