【发布时间】:2020-05-02 10:37:53
【问题描述】:
我正在尝试创建一个函数 applications,当给定一个术语 N 和一个术语列表 (X1,...,Xn) 时,它将返回 N(X1,...,Xn )
但是当我运行我的代码时,它显示以下错误:
* Couldn't match type `Term' with `[Char]'
Expected type: Var
Actual type: Term
* In the first argument of `Lambda', namely `x'
In the expression: Lambda x (applications v xs)
In an equation for `applications':
applications v (x : xs)
| x == [] = Lambda x v
| otherwise = Lambda x (applications v xs)
|
147 | |otherwise = Lambda x (applications v xs)
但由于某种原因,我的 applications 函数会导致此错误,即使它看起来类似于我的工作 abstractions。
applications :: Term -> [Term] -> Term
applications v [] = v
applications v (x:xs)
|x == [] = Lambda x v
|otherwise = Lambda x (applications v xs)
如果我是新手,我将不胜感激!
【问题讨论】:
-
那么在您的
applications中,您传递了Terms 的列表,您的Lambda可能期望Var作为头中的项目?此外,我猜应该是null xs而不是x == [],尽管这可能不是“核心问题”。 -
applications也是abstractions的反义词,根据这里的描述。这里你应该基本上在Lambda上进行模式匹配,然后将lambda主体中的lambda头部的变量替换为term。 -
@WillemVanOnsem 有帮助。我的代码现在显示为:|null xs = Lambda x v 虽然我现在在线上遇到错误:|otherwise = Lambda x (applications v xs)
-
是的,因为如上所述,您不能在您的
Lambda中使用Term作为变量。此外,applications应该与abstractions的相反。 -
您不想使用
Lambda来构建应用程序。您对要执行的操作的描述中没有 lambda:“给定一个术语 N 和一个术语列表 (X1,...,Xn) 返回 N(X1,...,Xn)”。通常有一个Term应用程序的构造函数。
标签: haskell lambda functional-programming lambda-calculus