tcl - 如何将整数传递给 vmd 中的 tcl 过程
问题描述
我是 tcl 编程的新手,我需要为 vmd 编写一个脚本,计算两对原子之间的两个距离并将它们打印到输出文件中。我不明白为什么 measure 不能采取 atom_1 等。这是我的脚本,谢谢你的帮助
proc distance {distance_1 atom_1 atom_2 distance_2 atom_3 atom_4 output} {
set outfile [open $output w]
puts $outfile "frame, $distance_1, $distance_2"
set nf [molinfo top get numframes]
for {set i 0} {$i < $nf} {incr i} {
set d1 [measure bond {$atom_1 $atom_2} frame $i]
set d2 [measure bond {$atom_3 $atom_4} frame $i]
puts $outfile "$i , $d1 , $d2"
}
close $outfile
}
解决方案
这里的问题是:
measure bond {$atom_1 $atom_2} frame $i
问题是{
Tcl 中的 ...<code>}实际上意味着“完全引用这个,完全没有替换”。它不是发送一个包含两个数字的列表,而是传递一个包含两个非数字的列表(文字字符串$atom_1
和$atom_2
)。
解决方法是替换{$atom_1 $atom_2}
为[list $atom_1 $atom_2]
.
是的,并且proc
利用这种行为。只是它们在执行过程中将事物传回 Tcl 解释器引擎。for
if
推荐阅读
- sql - 在 Oracle 目录中找不到文件
- c# - c# - 如何将数据存储在 FILE 中,以便垃圾收集器不会删除它们
- python - 确保数组的所有值都编码为 1 和 -1,而不是 1 和 0
- discord.js - 如何在禁止列表中获取用户(重复) discordjs
- c++ - 如何找到指定序列的“序数哈希码”?
- core-data - 如何修复错误:@FetchRequest 中的“属性初始化程序在”自我“可用”之前运行
- php - 记录过程和更改
- java - 为什么允许在没有合并功能的情况下将 List 转换为 Map?
- unity3d - 为什么 LWRP/URP 在迁移到 Unity 2019.4.x 后不呈现任何内容?
- python - Keras 没有对所有行建模