0

次の疑似コードを Haskell に変換しようとしています。

stringA = "ABCD"
stringB = "EFGH"
stringC = "ICJK"

function myFunction(String x) {

     otherFunction(x)

}

今、Haskellで私は持っています

 stringA = "ABCD";
 stringB = "EFGH";
 stringC = "ICJK";


test :: Int
test x = if x == 1 then otherFunction(??) else ...

test が x = "stringA" で呼び出されたときに、otherFunction が stringA をパラメーターとして受け取るようにするにはどうすればよいですか?

ありがとう!:)

4

2 に答える 2

7
test :: Int
test x = if x == 1 then otherFunction stringA else ...

もちろん、これは間違っています。test はパラメーターを受け取るため、型には常に (少なくとも) 1 つの (->) が含まれている必要があります。しかし、それは当面の問題ではありません。不思議なことに、疑似コード関数が String パラメーターを取ると主張しましたが、これはtest :: String -> ...Haskell のようになります。しかし、最初のパラメーターとして Int を明確に指定しています。つまり、その型はtest :: Int -> ...

これがあなたの疑似コードの私の翻訳です:

stringA = "ABCD"
stringB = "EFGH"
stringC = "ICJK"

test x = otherFunction x
于 2013-11-10T00:42:43.190 に答える
0
test "stringA" = otherFunction stringA
test "stringB" = otherFunction stringB
test "stringB" = otherFunction stringB
-- etc...

ご想像のとおり、これは 3 つまたは 4 つのケースを超えると大変なことになります。文字列をキーと値のペアとしてリストに保存するのはどうですか?

test strIn = (liftM otherFunction) lookup strIn dict
   where dict = 
        [("stringA", "ABCD"), ("stringB", "EFGH"), ("stringC", "ICJK")]

一般に、実行時に文字列を関数参照に変換する方法はありません。

于 2013-11-10T11:18:54.587 に答える