gpt4 book ai didi

python - 从 Haskell 到 Python : multiple-functions conversion issue

转载 作者:太空狗 更新时间:2023-10-30 01:55:15 26 4
gpt4 key购买 nike

我是编程新手,我被要求将 3 个 haskell 函数转换为 python 作为练习。这 3 个函数是相连的,因为一个函数的输出用作下一个函数的输入,依此类推。

我知道 haskell 函数的作用,但我不知道如何开始转换它们!

这是 haskell 代码:

factorial :: Int -> Int
factorial n = product (down n)

product :: [Int] -> Int
product [] = 1
product (a:as) = a * product as

down :: Int -> [Int]
down 0 = []
down n = n : down (n-1)

这是我对其进行转换的尝试:

class function:
def down(self):
if self.n == 0:
self.lista = []
else:
self.lista = range(self.n, 0, -1)

def product(self):
for x in self.lista:
if x == []:
self.product = 1
if x != []:
for i in self.lista:
self.product = i * self.product

def factorial(self):
self.n = int(raw_input("n="))

self.fact = self.product(self.down(self.n))

print self.fact
raw_input()

c = function()
c.factorial()

嗯,首先我相信这不是 haskell 代码的“直接转换”。但这没关系,但其次,它不起作用。

缺乏编程背景让我很难受...有人能帮我解决这个问题吗?

非常感谢!

编辑:

这个问题的重点是将haskell准确地转换成python。我自己做了一个精简版,这是练习的下一步^^

最佳答案

首先,放弃 class 包装器 - 这不是必需的。

直接的 Python 翻译应该是这样的:

# factorial :: Int -> Int
def factorial(n):
return product(down(n))

# product :: [Int] -> Int
def product(arr):
if len(arr) == 0: return 1
a, ar = arr[0], arr[1:]
return a * product(ar)

# down :: Int -> [Int]
def down(n):
if n == 0: return []
return [n] + down(n - 1)

但是这里的递归风格并不是很 Pythonic。下一个练习:将递归替换为迭代、列表理解或调用 reduce(如果在 Python2 上)。

关于python - 从 Haskell 到 Python : multiple-functions conversion issue,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13182699/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com