gpt4 book ai didi

Haskell:通过 "Principled Transformations"简化函数

转载 作者:行者123 更新时间:2023-12-02 17:08:36 26 4
gpt4 key购买 nike

过去一两周,在我的计算机科学课上,我们被要求展示如何通过“原则性转换”来简化和缩短函数。我们尚未收到有关这些作业的反馈,因此我不知道我做得是否正确。

这是我最新的练习,以及我对解决方案的尝试:

Show by a series of principled transformations that we can define:
char :: Char -> Parser Char
char c = satisfy (c==)
as
char :: Char -> Parser Char
char = satisfy . (==)

我的尝试:

char c = satisfy (c==)
=> char c = satisfy . c==
=> char c = satisfy . flip ==c
=> char = satisfy . flip ==
=> char = satisfy . (==)

我可以得到一些反馈吗?为作业提供的代码不完整,因此我无法对其进行编译并测试以查看每个转换是否有效。我尝试编写一组类似的函数来自己测试转换,但不幸的是,我对 Haskell 很不擅长并且很陌生,所以我也无法弄清楚这一点。

最佳答案

以下是分步方法:

char c = satisfy (c==)
char c = satisfy (\x -> c == x) -- Sections [1]
char c = satisfy (\x -> (==) c x) -- Prefix form
char c = satisfy ((==) c) -- Eta reduction [2]
char c = (.) satisfy (==) c -- Composition: `(.) f g x = f (g x)`
char c = (satisfy . (==)) c -- Infix form
char = satisfy . (==) -- Eta reduction

我什至可能会放弃显式扩展该部分,而只是从 (c==) 转到 ((==) c)

1:http://www.haskell.org/onlinereport/haskell2010/haskellch3.html#x8-300003.5
2:http://www.haskell.org/haskellwiki/Eta_conversion

关于Haskell:通过 "Principled Transformations"简化函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19851677/

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