File io 如何使用Scheme文件i/o修改一组Ansys Fluent变量? 问题
我的同事和我一直在尝试使用一些方案代码,这些代码将从TSV文件中获取输入,并将这些值分配给已经在Ansys软件中定义的变量File io 如何使用Scheme文件i/o修改一组Ansys Fluent变量? 问题,file-io,scheme,File Io,Scheme,我的同事和我一直在尝试使用一些方案代码,这些代码将从TSV文件中获取输入,并将这些值分配给已经在Ansys软件中定义的变量 档案 TSV文件的组织方式如下: 1 0.7 0.8 0.7 1.0 0.5 [...] 2 0.9 0.9 0.3 0.5 0.5 [...] 3 0.5 0.8 0.3 0.3 0.7 [...] 4 0.6 0.2 1.0 0.5 0.5 [...] 5 0.9 0.0 0.0 0.8 0.3 [
档案 TSV文件的组织方式如下:
1 0.7 0.8 0.7 1.0 0.5 [...]
2 0.9 0.9 0.3 0.5 0.5 [...]
3 0.5 0.8 0.3 0.3 0.7 [...]
4 0.6 0.2 1.0 0.5 0.5 [...]
5 0.9 0.0 0.0 0.8 0.3 [...]
6 0.5 0.6 0.3 0.4 1.0 [...]
[ ... ]
1998 0.5 0.0 0.2 0.9 0.0 [...]
1999 0.8 0.2 0.2 0.7 0.2 [...]
2000 0.7 0.2 0.8 0.4 0.5 [...]
第一列是流动时间,在该流动时间,需要将该特定输入集分配给软件中的变量;其他96列表示需要设置的96个变量
我目前掌握的方案代码如下:
;Set variables
(define (setFunc)
(lambda(row-position outflow-number flow-wt-1)
(let outflow-string ((string-append("def bc outflow " outflow-number " ~a")))
(if (< row-position 180)
(ti-menu-load-string (format #f (outflow-string) flow-wt-1))
(ti-menu-load-string (format #f (outflow-string) 0.0))
)
)
)
)
;Read a file to a list of chars
(define (file->char_list)
(call-with-input-file "doorstates.txt"
(lambda(input-port)
(let loop ((x (read-char input-port)))
(if (not (eof-object? x))
(#t (begin (cons x (loop (read-char input-port)))))
)
)
)
)
)
;Main
(begin
(let inFile ((apply string (file->char_list)))
(let inFileList ((string-split (inFile #\newline)))
(let index ((0))
; Row position = flow-time - 1
(define rowPosition ((- flow-time 1)))
(let loop ((index))
(cond ((>= index (length inFileList))
'()
)
((= (- index (* (/ index 97) 97)) 0)
(+ index 1)
(loop (index))
)
((= (/ index 97) rowPosition)
; Column position = index - (rowPosition * rowLength)
(define colPosition ((- index (* rowPosition 97))))
(setFunc (rowPosition colPosition list-ref inFileList index))
(+ index 1)
(loop (index))
)
(else
(+ index 1)
(loop (index))
)
)
)
)
)
)
)
我读过的所有资料都说,未绑定变量最有可能的原因是在非函数(如文字)的参数周围加了额外的括号;但我所看到的每件事都有双括号围绕let参数
重点
我从来没有与方案或任何其他LISP的变化之前,被放在这个项目,所以如果有任何错误或常见的做法,我错过了,请让我知道。此外,如果上述方案代码是完全垃圾,没有做我需要它做的,请让我知道,并建议下一步 您误解了错误消息。您的
begin
缺少右括号。因此,在以(begin…
)开头的“列表”中会遇到文件结尾。此外,您正在错误地使用let
。您需要将使用变量的代码括起来,例如:
(let ((a 1))
(+ a 7))
我建议使用能够理解s表达式的编辑器。您误解了错误消息。您的
开始
缺少右括号。因此,文件结尾出现在以开始的“列表”中(开始…
。此外,您正在错误地使用let
。您需要将使用变量的代码括起来,例如:
(let ((a 1))
(+ a 7))
我建议使用能够理解s表达式的编辑器。谢谢Michael!我遇到了另一个错误。请查看上面的编辑,如果您有时间,请进行权衡!您仍然在错误地使用
let
。特别是,(让我们填充((apply string…
试图定义一个命名循环,在此过程中重新定义了apply
。谢谢Michael!我遇到了另一个错误。请查看上面的编辑,如果有时间请过问!您仍在错误地使用let
。特别是,(let infle((应用字符串…
是一种尝试定义命名循环的方法,在过程中重新定义apply
。