标签: lambda-calculus

如果没有else else语句,如何在haskell中编写递归因子函数

fac n = if n < 2 then 1 else n * fac (n-1)

main = do

   putStrLn "Enter a number: "  
   number <- getLine 
   print $ number >>= fac
Run Code Online (Sandbox Code Playgroud)

我不知道如何在没有if语句的情况下编写递归因子函数.我们的教授说有关lambda演算的事情.

haskell lambda-calculus

1
推荐指数
1
解决办法
678
查看次数

应用程序和抽象的 lambda 演算优先级

Application has higher precedence than abstraction.
Run Code Online (Sandbox Code Playgroud)

从这个意义上说,什么是 lambda 演算抽象?我很困惑有什么优先权?

abstraction lambda-calculus apply operator-precedence

1
推荐指数
1
解决办法
904
查看次数

Haskell 中的连接以及与 AList 的混淆 ([a] -&gt; [a])

我有一个项目,我们正在提高在 Haskell 中连接列表的速度。我是 Haskell 的新手,对AList ([a] -> [a])特别是如何将我的 AppendedList 转换为常规列表感到困惑 。任何帮助,将不胜感激。

newtype AppendedList a = AList ([a] -> [a])

-- List[5] is represented as AList (\x -> 5:x) 
-- This function takes an argument and returns the AppendedList for that 
single :: a -> AppendedList a
single m = AList (\x -> m : x)


-- converts AppendedList to regular List
toList :: AppendedList a -> [a]
toList = ???
Run Code Online (Sandbox Code Playgroud)

haskell functional-programming list concatenation lambda-calculus

1
推荐指数
1
解决办法
112
查看次数

Lambda 演算需要解释

这种letlambda 演算版本的处理let中给出

(\f.z)(\x.y)
Run Code Online (Sandbox Code Playgroud)

用词

ff x = y 在表达式中 由 定义z,然后作为

let f x = y in z
Run Code Online (Sandbox Code Playgroud)

我从初学者的角度知道 Haskell 是如何let工作的,即定义遵循let并且表达式(对这些定义做一些事情)遵循in.

let <definitions> in <expression>
Run Code Online (Sandbox Code Playgroud)

但是这种最一般的 lambda 演算描述令人困惑。例如,我假设可能有一个 Haskell lambda 函数版本的let f x = y in z. 有人可以在 Haskell 中写出这个 - 也许举一两个例子 - 吗?只是猜测,似乎第一个 lambda 函数需要第二个 lambda 函数——不知何故?

(\x -> y)(\f -> z)
Run Code Online (Sandbox Code Playgroud)

但这只是一个猜测。

haskell lambda-calculus let

1
推荐指数
1
解决办法
94
查看次数

来自 lambda 演算的示例汇编/机器指令

我正在学习一些 lambda 演算,我很好奇的一件事是完全抽象的函数如何实际应用于指令中。让我们看下面的例子,我允许小的自然数(作为给定的)和一个TRUE FALSE定义。

例如,让我们使用以下代码,其计算结果应为5

# using python for the example but anything would suffice
TRUE = lambda x: lambda y: x      # T = ?ab.a
FALSE = lambda x: lambda y: y     # F = ?ab.b
TRUE(5)(2)                        # T('5')('2')
Run Code Online (Sandbox Code Playgroud)

这如何在类似 lambda 演算的指令中实现以评估这一点?我想到的一件事是“取消 lambda 化”它,所以它只是出现如下:

// uncurried
int TRUE(int x, int y) {
    return x;
}
int FALSE(int x, int y) {
    return y;
}
TRUE(2, 5);
Run Code Online (Sandbox Code Playgroud)

可能会出现以下情况:

SYS_EXIT = 60
.globl _start

TRUE:                      # faking …
Run Code Online (Sandbox Code Playgroud)

compiler-construction assembly functional-programming compilation lambda-calculus

1
推荐指数
1
解决办法
273
查看次数

找出lambda演算/ haskell类型的一些例子

假设函数将两个不同类型的变量作为其输入(例如,一个变量在C语言中为int,一个变量在C语言中为char)并返回一个变量Int.

如果此函数被编码为Haskell或lambda演算代码,函数的类型将如何?

所以假设函数有类型Int -> (Char -> Char) -> Int.这意味着什么?这是否意味着它接收int变量作为输入并运行函数(Char -> Char)和输出Int变量?

lambda haskell lambda-calculus

0
推荐指数
1
解决办法
230
查看次数

lambda calculus语法LLR

我正在尝试编写一个lambda演算解析器,我定义的语法似乎不在LLR中:

E ::= x | \x.E | EE | (E)
Run Code Online (Sandbox Code Playgroud)

我减少左递归:

E ::= xE' | \x.EE' | (E)E'
E'::= EE' | <empty>
Run Code Online (Sandbox Code Playgroud)

似乎不对,有人可以帮忙吗?

compiler-construction haskell lambda-calculus context-free-grammar left-recursion

0
推荐指数
1
解决办法
1132
查看次数

Haskell实用程序使函数点免费

我想快速正确地减少函数以在Haskell中指向自由格式.我更愿意产生相当可读的结果.我该怎么办呢?

haskell lambda-calculus pointfree combinatory-logic

0
推荐指数
1
解决办法
169
查看次数

减少WHNF中的lambda表达式

我必须将以下lambda表达式减少为WHNF,但我不太清楚如何做到这一点:

(?x y. x 3) (+ 4) (+ 6 7)
Run Code Online (Sandbox Code Playgroud)

那么,我该怎么做?呼叫减少名称?

这个表达式(其他例子)(?z x. (?x. x) z) x在WHNF中了吗?

haskell lambda-calculus lazy-evaluation weak-head-normal-form

0
推荐指数
1
解决办法
327
查看次数

Haskell:元组的递归定义

在其中,我尝试创建Krivine抽象机。我需要构建的数据类型之一是环境。这样构建环境:

我们有x,一个“ Var”(这只是字符串的同义词)我们有N,一个“ Term”(这是一个Lambda项)

因此,环境E的定义为:

E =(x,N,E)·E.

因此,环境就是元组列表。每个元组包含一个Var(字符串),一个Term和一个环境列表(可能为空)。

我正在定义“ Env”,如下所示:

data Env = Env (Var, Term, [Env])
Run Code Online (Sandbox Code Playgroud)

在我看来,这似乎应该起作用。但是,当我尝试使用Env时,我得到:

*Main> ("y", Lambda "z" (Variable "z"), []) :: Env

<interactive>:166:1: error:
* Couldn't match expected type `Env'
              with actual type `([Char], Term, [a0])'
* In the expression: ("y", Lambda "z" (Variable "z"), []) :: Env
  In an equation for `it':
      it = ("y", Lambda "z" (Variable "z"), []) :: Env
Run Code Online (Sandbox Code Playgroud)

“ y”肯定是[Char]

Lambda“ z”(变量“ z”)绝对是Term类型的

空列表绝对是列表!

我觉得问题可能出在空列表上,但绝对不可缺少的是环境中可以存在一个空列表(这是基本情况)。

我现在一直在努力工作几个小时,一点也​​不运气。任何帮助是极大的赞赏。

recursion haskell lambda-calculus

0
推荐指数
1
解决办法
133
查看次数