我正在嘗試創建一個用于評估的測驗腳本。該腳本需要打開 Haskell GHCI 并向 ghci 發送各種命令并檢查輸出是否正確。它需要一直持續到所有命令的結尾,并給出一個最終的分數,即不要只是輸出不正確就停止運行。目前,我有這個。
#!/bin/env expect
spawn ghci
expect ".*> "
send ":l main.hs\n"
expect "*Main>"
send "transform [(5,1),(6,1),(8,15),(9,1)]\n"
expect "*Main>"
它打開 ghci 并加載正確的 haskell 檔案(main.hs)。然后它使用該串列引數運行轉換函式。我怎樣才能得到這個來驗證輸出是否等于我想要的并相應地給出分數。例如:偽
#!/bin/env expect
spawn ghci
expect ".*> "
send ":l main.hs\n"
expect "*Main>"
send "transform [(5,1),(6,1),(8,15),(9,1)]\n"
if OUTPUT = [(5,5),(6,5),(8,5),(9,5)]
then POINTS = 5
send "translate [(5,1),(6,1),(8,15),(9,1)]\n"
if OUTPUT = [(5,10),(6,10),(8,10),(9,10)]
then POINTS = 5
expect "*Main>"
send ":quit"
OUTPUT SCORE
所有命令都在 Haskell 中完成,但從 shell 腳本運行。任何人都可以幫忙嗎?
uj5u.com熱心網友回復:
這是一種(未經測驗的)方法:
#!/bin/env expect
spawn ghci
expect "*> "
send ":l main.hs\n"
expect "*Main>"
set POINTS 0
send "transform [(5,1),(6,1),(8,15),(9,1)]\n"
expect {
-ex {[(5,5),(6,5),(8,5),(9,5)]} {
incr POINTS 5
exp_continue
}
*Main>
}
send "translate [(5,1),(6,1),(8,15),(9,1)]\n"
expect {
-ex {[(5,10),(6,10),(8,10),(9,10)]} {
incr POINTS 5
exp_continue
}
*Main>
}
send ":quit"
puts $POINTS
有關詳細檔案,請參閱https://www.tcl.tk/man/expect5.31/expect.1.html和https://www.tcl-lang.org/man/tcl/TclCmd/contents.htm。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/423013.html
標籤:
上一篇:如何在Windows上獲取ar
下一篇:在Haskell中更新外部變數
