SML:通过直接打印字符串来替换 concat
SML : Replacing a concat by printing the string directly
我有一个功能现在可以正常工作...
但不幸的是,在显示它之前构建了一个非常大的字符串。
我想直接显示每个字符串而不是连接它们,但我不知道该怎么做...
函数如下:
fun getBlocked w =
case BlockingMgr.listBlockedSuccessors w
of nil => ""
| ws =>
concat (
List.map (
fn (r, w') => (
" v " ^ r ^
" w " ^ Int.toString (Node.getId w ) ^
" w" ^ Int.toString (Node.getId w') ^ "\n"
) ws
)
此函数连接所有 w'
可能的,然后:
fun af w = print( getBlocked(w) )
使用 af
我可以显示一个节点。然后在最后的代码中我调用
app af ( Nodestore.listNodes() )
我的函数 app
将在我的 listNodes()
的所有 Node
上调用 af
。
所以正如我所说,这段代码可以工作,但是当列表开始变大时,它就不再可用了……我的猜测是 concat
绝对不是一个好主意,所以我想替换它并能够直接显示每个 w
的每个 w'
后继者。但不幸的是,我是 SML 的新手,我不知道该怎么做...
提前感谢您的帮助:)
此致。
有点不清楚你到底想要什么,但据我了解,以下应该可以解决你的问题:
fun displayBlocked w =
let
fun renderW (r, w') =
" v " ^ r ^
" w " ^ Int.toString (Node.getId w ) ^
" w" ^ Int.toString (Node.getId w') ^ "\n"
in
case BlockingMgr.listBlockedSuccessors w
of nil => ()
| ws => List.app (fn w => print (renderW w)) ws
end
显示次数:
fun displayBlocked w =
let
fun renderW (r, w') =
" v " ^ r ^
" w " ^ Int.toString (Node.getId w ) ^
" w" ^ Int.toString (Node.getId w') ^ "\n"
fun renderAndInc (w, count) =
(
print (renderW w);
count + 1
)
in
case BlockingMgr.listBlockedSuccessors w
of nil => 0
| ws => List.foldl renderAndInc 0 ws
end
我有一个功能现在可以正常工作... 但不幸的是,在显示它之前构建了一个非常大的字符串。
我想直接显示每个字符串而不是连接它们,但我不知道该怎么做...
函数如下:
fun getBlocked w =
case BlockingMgr.listBlockedSuccessors w
of nil => ""
| ws =>
concat (
List.map (
fn (r, w') => (
" v " ^ r ^
" w " ^ Int.toString (Node.getId w ) ^
" w" ^ Int.toString (Node.getId w') ^ "\n"
) ws
)
此函数连接所有 w'
可能的,然后:
fun af w = print( getBlocked(w) )
使用 af
我可以显示一个节点。然后在最后的代码中我调用
app af ( Nodestore.listNodes() )
我的函数 app
将在我的 listNodes()
的所有 Node
上调用 af
。
所以正如我所说,这段代码可以工作,但是当列表开始变大时,它就不再可用了……我的猜测是 concat
绝对不是一个好主意,所以我想替换它并能够直接显示每个 w
的每个 w'
后继者。但不幸的是,我是 SML 的新手,我不知道该怎么做...
提前感谢您的帮助:)
此致。
有点不清楚你到底想要什么,但据我了解,以下应该可以解决你的问题:
fun displayBlocked w =
let
fun renderW (r, w') =
" v " ^ r ^
" w " ^ Int.toString (Node.getId w ) ^
" w" ^ Int.toString (Node.getId w') ^ "\n"
in
case BlockingMgr.listBlockedSuccessors w
of nil => ()
| ws => List.app (fn w => print (renderW w)) ws
end
显示次数:
fun displayBlocked w =
let
fun renderW (r, w') =
" v " ^ r ^
" w " ^ Int.toString (Node.getId w ) ^
" w" ^ Int.toString (Node.getId w') ^ "\n"
fun renderAndInc (w, count) =
(
print (renderW w);
count + 1
)
in
case BlockingMgr.listBlockedSuccessors w
of nil => 0
| ws => List.foldl renderAndInc 0 ws
end