gpt4 book ai didi

Haskell:顺序不敏感的函数式应用程序

转载 作者:行者123 更新时间:2023-12-04 22:15:08 25 4
gpt4 key购买 nike

我想在 Haskell 中实现一个对顺序不敏感的功能应用程序版本。通过一点背景介绍:自然语言语义学的一个突出传统(源自 Richard Montague 等)将各种类型的 lambda 函数指定为表达式的语义值 (sv's)。通过对句子成分的 sv 执行函数应用来计算句子的真值。举一个简单的例子,考虑:

tl = [1..10]

bill :: Int
bill = 1

tall :: Int -> Bool
tall = \x -> x `elem` tl

把句子“Bill is high”想象成一棵树,左边的叶子被“Bill”占据,右边的叶子被“tall”占据。我们通过将 叶的 sv 应用到 叶的 sv 来计算句子的真值。现在考虑'Some man is high':这里左叶被'some man'占据[其sv类型为:: (Int -> Bool) -> Bool],右叶被'tall'占据[其中 sv 的类型为::(Int -> Bool)]。我们通过将 叶的 sv 应用到 叶的 sv 来计算句子的真值。

所以,在这个系统中,给定一棵树的左叶 a 和右叶 b,我们 首先 检查哪个叶子在另一个域中,然后 然后 相应地应用函数应用:如果 a 在 b 的域中,我们做 b(a),而如果 b 在 a 的域中,我们做 a(b)。

我将如何在 Haskell 中实现这种“顺序不敏感”的功能应用程序?我编写了一些函数,通过解析结果来确定哪个叶子在另一个域中
show (typeOf a)

对于一片叶子 a.然而,这在我看来是不必要的麻烦。如果您尝试例如,Ghci 会出错评估
bill tall

因此,检查哪个项目在另一个领域中的简单方法是尝试将一个项目应用于另一个项目,然后查看是否会产生错误/异常。那么,我的问题是:如何捕获由类型不匹配导致的异常?也就是说,我如何捕获此类非 IO 异常?

最佳答案

您无法在运行时发现类型不匹配;这是一个编译时错误。 (至少,不是不使用 ghc-api 在运行时编译代码。ghci 是 ghc-api 的包装器,这就是它可以执行此操作的原因。)您需要找到一种方法来捕获 ADT 中的这种类型区别以在运行时执行,或者可能使用类型类(尽管这会引入其他复杂性)。

关于Haskell:顺序不敏感的函数式应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10292405/

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