如果函数式编程语言不能保存任何状态,他们如何做一些简单的事情,比如从用户那里读取输入?他们如何"存储"输入(或存储任何数据?)
例如:这个简单的C语言如何转换为像Haskell这样的函数式编程语言?
#include<stdio.h>
int main() {
int no;
scanf("%d",&no);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
(我的问题受到了这篇优秀文章的启发:"名词王国的执行".阅读它让我更好地理解了什么是面向对象的编程,Java如何以一种极端的方式实现它,以及函数式编程语言是如何实现的对比.)
oop paradigms haskell programming-languages functional-programming
Haskell通常被引用为纯函数式语言的示例.鉴于存在,这怎么可能是合理的System.IO.Unsafe.unsafePerformIO?
编辑:我认为"纯功能"意味着不可能将不纯的代码引入程序的功能部分.
haskell type-systems functional-programming referential-transparency unsafe-perform-io
Haskell中的monadic IO构造只是一个约定,还是有一个实现原因呢?
你能不能只用FFI进入libc.so而不是你的IO,并跳过IO Monad组件?
无论如何它会起作用,或者结果是不确定的,因为Haskell评估懒惰或其他东西,比如GHC是IO Monad的模式匹配,然后以特殊方式或其他方式处理它.
真正的原因是什么?最后你最终会产生副作用.那么为什么不这么简单呢?
在看到如何定义List和Maybe monad之后,我自然会对IO monad 的操作>>=和return定义感到好奇.
我仍在努力与Haskell,现在我遇到了一个问题,从这个例子包围我的思想输入/输出monad :
main = do
line <- getLine
if null line
then return ()
else do
putStrLn $ reverseWords line
main
reverseWords :: String -> String
reverseWords = unwords . map reverse . words
Run Code Online (Sandbox Code Playgroud)
我理解,因为像Haskell这样的函数语言不能基于函数的副作用,所以必须发明一些解决方案.在这种情况下,似乎所有东西都必须包裹在一个do块中.我得到了简单的例子,但在这种情况下我真的需要一些解释.
为什么do在I/O操作中使用一个单独的块是不够的?为什么你必须在if/else情况下打开全新的?此外,什么时候,我不知道如何调用它,domonad的"范围" 结束,即你什么时候才能使用标准的Haskell术语/函数?
就简洁的总结而言 - 对Monad 的这种描述似乎获胜- 将它们描述为“不纯计算的类型”。
对 comonad 的等效简洁(一句话)描述是什么?
在操作数据帧时,在 Pandas 函数中使用就地参数可能是很常见的。
Inplace是在不同函数中使用的参数。一些函数中使用 inplace 作为属性,例如set_index(), dropna(), fillna(), reset_index(), drop(), replace()等等。该属性的默认值为False,它返回对象的副本。
我想详细了解什么时候在 pandas 函数中使用是好的做法inplace,什么时候也不应该这样做,以及原因。您能否在示例中进行演示以供参考,因为这个问题在使用 pandas 函数时很常见。
例如:
df.drop(columns=[your_columns], inplace=True)
在这种情况下,建议使用 inplace 和 drop 。另外,如果某些变量喜欢list依赖于数据框。就地更改它会影响依赖于它的其他变量的结果。另一个问题是在 pandas 数据帧上使用就地阻止方法链接。