我有这段python代码,我想将其翻译成haskell:
T = int(input())
for t in range(0, T):
n = int(input())
a = list(map(int, input().split()))
lis = [[0 for j in range(0, n)] for i in range(0, n)]
for i in range(0, n):
for j in range(i, n):
val = 1
for k in range(i, j):
if(a[k] < a[j] and 1 + lis[i][k] > val):
val = 1 + lis[i][k]
lis[i][j] = val
ans = ''
我希望能够在haskell中创建一个可以执行此操作的函数。但是,该程序基本上取自诸如
之类的输入1
5
1 2 9 6 8
其中第一行是测试用例的数量,第二行是特定测试用例中的数字,第三行是测试用例本身。它正在寻找测试用例中的多个递增序列
答案 0 :(得分:2)
如何创建一个执行if检查然后返回值的函数?
如果这确实是你的问题,这将回答它:
fun :: () -> String
fun () = if 5 > 6 then "You're nuts!" else "Obviously!"
但也许你的标题应该是“Haskell中的多个增加序列”。
我有这条python代码,我想将其转换为Haskell:[...]
我希望能够在Haskell中创建一个可以执行此操作的函数。
所以你想翻译一些代码;但你的问题是什么?您是否要求其他人翻译,或提供有关如何翻译特定位的提示?或者更一般地说,如何从一种编程范式转换为另一种编程范式?
其他人如何让您在Haskell中创建这样的功能?如果你坚持“如何制作一个函数和一个if子句?”,那么你的问题可能应该是How to get started with Haskell?请记住你点击了“提问”按钮,而不是“制作需求”按钮。 ; - )
该程序主要取自
等输入1 5 1 2 9 6 8
其中第一行是测试用例的数量,第二行是特定测试用例中的数字,第三行是测试用例本身。它正在寻找测试用例中的多个递增序列
这似乎是实际的问题,除了你没有真正说出“多个增加序列”问题是什么。如果您需要有关解决问题的帮助,您必须说明问题。
在不确切知道您的问题是什么的情况下,似乎它包含从标准输入解析的n
个子问题;每个子问题都包含在一个整数数组中。所以你至少可以建立以下两个部分:
通过I / O解决问题:
import Control.Monad (replicateM)
-- Read a line that contains an Int.
readInt :: IO Int
readInt = undefined
-- Read a line that contains multiple Ints.
readInts :: IO [Int]
readInts = fmap (map read . words) getLine
-- Read n problems.
readProblems :: IO [[Int]]
readProblems = readInt >>= \n -> replicateM n (readInt >> readInts)
解决没有I / O的问题:
solveProblem :: [Int] -> Int
solveProblem ns = undefined
将这些部分拼凑在一起:
main :: IO ()
main = do
problems <- readProblems
forM problems (print . solveProblem)
答案 1 :(得分:1)
我将准确地回答你的问题,但是当你从python或其他面向对象语言转换为函数式编程时,你无法以完全相同的方式进行。大多数时候,你必须提出一点点不同的逻辑。我很难为你提供更多帮助,因为你发送了一小段代码而且信息很少。
但是,你可能想要一些函数,它正在处理你在这段代码中使用的所有变量,所以对于这个函数我也认为a, k, j, i, val, lis
最好使用返回类型{{1} },如果你没有更改val或Maybe
新值,它将返回Nothing
。对于数组/列表索引,您可以使用运算符Just val
。
!!
但就像我之前说过的那样......我认为你可能正在做一些循环等等。为此,在Haskell中使用模式匹配和递归要好得多......
希望我能帮助你......