我对PRESENT使用Fortran 95 的语句有疑问.目前我正在使用Silverfrost的Plato和他们的FTN95编译器(在"Release Win32"模式下).我想要做的是创建一个子程序SUB(a,b),其中b是一个可选变量.到目前为止一切都那么好,但是当我试图给出一个新的价值时,问题就出现b了if (.NOT. present(b)) b=0.这是代码:
module MOD
contains
subroutine SUB(a,b)
implicit none
integer :: a
integer,optional :: b
if (.NOT. present(b)) b=0
print*, a,b
end subroutine SUB
end module MOD
program TEST
use MOD
implicit none
integer :: i=2, j=1
call SUB(i,j)
call SUB(i)
call SUB(j)
end program TEST
Run Code Online (Sandbox Code Playgroud)
有没有一种优雅的方式摆脱这种情况,或者我真的需要创建另一个变量,b_aux例如,然后使用以下代码?:
if (present(b)) then
b_aux=b
else
b_aux=0
endif
Run Code Online (Sandbox Code Playgroud) 使用 LilyPond 2.17.25 编写长脚注时,文本不会分成多行或遵守边距限制。如果可能的话,我也希望将其设置为合理的对齐方式。
这是一个小例子:
\version "2.17.25"
{
\footnote #'(-1 . 1)
\markup{Lorem ipsum dolor sit amet, consectetur adipiscing elit. Ut eget ante venenatis mi consectetur ornare. Cras facilisis dictum venenatis. Donec.}
a'4 b' c'' d''
}
Run Code Online (Sandbox Code Playgroud)
多谢!
我OPTIONAL在使用Fortran 95的函数和子程序中的语句有问题.目前我正在使用Silverfrost的Plato和他们的FTN95编译器(在"Release Win32"模式下).在我正在编写的更复杂的程序中尝试实现OPTIONAL语句之后,我创建了一个非常简单的程序来测试它.这是代码:
program TEST
implicit none
integer :: a=1, b=2
call Z(a,b)
call Z(a)
call Z(b)
end program TEST
subroutine Z(x,y)
implicit none
integer :: x
integer, optional :: y
if (present(y)) then
write(*,*) x, y
else
write(*,*) x
endif
end subroutine Z
Run Code Online (Sandbox Code Playgroud)
我希望屏幕上显示以下结果:
1 2
1
2
Run Code Online (Sandbox Code Playgroud)
好吧,代码编译,虽然我得到一个警告(673)"SUBROUTINE Z被调用的参数太少".执行后,我进入我的屏幕:
1 2
Run Code Online (Sandbox Code Playgroud)
然后出现"访问冲突"错误消息.有人能理解这里有什么问题吗?
非常感谢!吉尔伯托
关于Fortran 95中的2维数组(即矩阵),我有一个简单的问题.据我所知,数学将矩阵内部的元素定义为Aij,其中i表示其行,j表示其列.好吧,如果我只是编码write(*,*) Matrix,结果会反转行和列!请参考以下示例代码:
program TEST
implicit none
integer :: P(3,3), i
P(1,1)=1
P(1,2)=2
P(1,3)=3
P(2,1)=4
P(2,2)=5
P(2,3)=6
P(3,1)=7
P(3,2)=8
P(3,3)=9
do i=1,3
write(*,"(3(I1,1X))") P(i,1:3)
enddo
write(*,*)
write(*,"(3(I1,1X))") P
end program TEST
Run Code Online (Sandbox Code Playgroud)
通过使用上面的循环(修复一行,然后在其中打印每一列),我得到了我期望的结果:
1 2 3
4 5 6
7 8 9
Run Code Online (Sandbox Code Playgroud)
现在通过使用最后一个语句write(*,"(3(I1,1X))") P,我得到:
1 4 7
2 5 8
3 6 9
Run Code Online (Sandbox Code Playgroud)
我在这里做错了吗?
我希望能够在不共享源代码的情况下共享FORTRAN 95模块.是否可以这样做(可能是通过共享.MOD文件)?如果这是相关的,我在Plato上使用Silverfrost FTN95编译器.到目前为止,我只能通过使用外部模块的源代码来完成这项工作.这是一个例子:
file:module_test.f95
module TEST
contains
subroutine 1
code...
end module TEST
Run Code Online (Sandbox Code Playgroud)
file:main_program.f95
include "module_test.f95"
program MAIN_PROGRAM
use TEST
implicit none
code...
end program MAIN_PROGRAM
Run Code Online (Sandbox Code Playgroud)
那么,有没有人可以使用我的模块TEST而不需要我的文件module_test.f95,也不能include "module_test.f95"使用主代码中的行?
非常感谢!
我想知道这句话之间有什么不同:
open(unit=11,file="something.TXT",status="unknown"),这是Fortran的默认值status(即,前一个语句是相同的open(unit=11,file="something.TXT")
这句话:
open(unit=11,file="something.TXT",status="replace")
我的印象是unknown状态的行为完全符合我的预期replace:如果文件不存在,则会创建它.如果确实存在,则替换它.
很长一段时间我一直在使用Fortran,最近我决定学习C.虽然我理解C中的函数是如何工作的,但我很难找到有关如何在C中实现与Fortran子程序等效的东西的信息.这个概念是否存在于C语言?
考虑一下这个Fortran代码:
module myMod
implicit none
contains
function func(a, b)
integer :: func
integer, intent(IN) :: a, b
func = a + b
end function func
subroutine sub(a, b, c)
integer, intent(INOUT) :: a, b
integer, intent(OUT) :: c
a = a * b
b = 3 * a
c = a + b
end subroutine sub
end module myMod
program example
use myMod
implicit none
integer :: i, j, k
i = 1
j = 2
k = func(i,j) …Run Code Online (Sandbox Code Playgroud) 我正在使用 Sphinx 的自动摘要为模块的每个成员自动生成单独的第一个文件。文档按预期创建,只是生成的第一个文件缺少除__init__.
在我的conf.py我有以下几行:
extensions = [
'sphinx.ext.autodoc',
'sphinx.ext.autosummary',
]
autosummary_generate = True
autosummary_imported_members = True
Run Code Online (Sandbox Code Playgroud)
考虑下面的虚拟类,它包含 dunder 和常规公共方法:
class MyClassA:
def __init__(self):
r'__init__ docstring'
pass
def __call__(self):
r'__call__ docstring'
pass
def __len__(self):
r'__len__ docstring'
pass
def public_method_1(self):
r'public_method_1 docstring'
pass
def public_method_2(self):
r'public_method_2 docstring'
pass
Run Code Online (Sandbox Code Playgroud)
在我的第一个主文件中,我设置了自动摘要,如下所示:
.. autosummary::
:toctree: my_module_members
my_module.MyClassA
my_module.MyClassB
Run Code Online (Sandbox Code Playgroud)
/my_module_members正如预期的那样,自动摘要会为模块的每个成员创建一个以单独的第一个文件命名的子目录。但仅__init__在这些自动生成的第一个文件的“方法”部分中列出。例如:
my_module.MyClassA
==================
.. currentmodule:: my_module
.. autoclass:: MyClassA
.. rubric:: Methods
.. autosummary::
~MyClassA.__init__
~MyClassA.public_method_1
~MyClassA.public_method_2
Run Code Online (Sandbox Code Playgroud)
因此,在生成的 html 文档中,方法表中仅列出了这三个方法,而没有 …
我正在使用Lilypond中有很多重复的分数,其中基本上每个小节都必须重复一定次数.我希望能够在每个栏上面写下它应该重复的次数,类似于下面的分数(不是在Lilypond中创建的):

能够在条形图上方放置一些括号并将"3x"集中在一起会很棒,就像上面的例子一样.到目前为止,我在Lilypond中提出的唯一(临时)解决方案是添加重复条,然后在每个条的第一个音符上方写上"3x"(因为我不能将它集中在条形图上) .它看起来不太好,但完成工作.这个临时解决方案如下所示:

任何关于如何使这个例子看起来更像第一家旅馆Lilypond的建议将非常受欢迎!
我正在尝试用 Lilypond 中的自定义图形替换默认的音符头。我已经阅读了 A.10.3 Graphic 下的文档,其中解释了如何使用\markup将图形添加到乐谱中,但是我坚持能够使用它们来替换音符头。我的问题是如何将默认注释头替换为自定义注释头?