如何从本地Python(3.0)脚本简单地SSH到远程服务器,提供登录/密码,执行命令并将输出打印到Python控制台?
我宁愿不使用任何大型外部库或在远程服务器上安装任何东西.
这是我第一次在这里发帖,希望我做得对.
基本上我需要帮助试图找出我用C编写的一些代码.程序的目的是要求用户输入0到23之间的数字.然后,根据用户输入的数字,半金字塔将打印(就像旧学校马里奥游戏中的那些).我是编程的初学者,仅凭运气就得到了我的代码的答案,但现在我无法确定我的for循环如何提供金字塔形象.
#include <stdio.h>
int main ( void )
{
int user_i;
printf ( "Hello there and welcome to the pyramid creator program\n" );
printf ( "Please enter a non negative INTEGER from 0 to 23\n" );
scanf ( "%d", &user_i );
while ( user_i < 0 || user_i > 23 )
{
scanf ( "%d", &user_i );
}
for ( int tall = 0; tall < user_i; tall++ )
{
// this are the two for loops that happened …
Run Code Online (Sandbox Code Playgroud) 有没有办法对monad中存储的值执行一个案例,而不必将名称绑定到它?
即而不是这样做:
c <- getChar
case c of
...
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点:
mcase getChar of
...
Run Code Online (Sandbox Code Playgroud)
或者,如果case语句可以部分应用,那将是很好的:
case of
...
Run Code Online (Sandbox Code Playgroud)
会不情愿地:
\a -> case a of
...
Run Code Online (Sandbox Code Playgroud)
所以你可以这样做:
getChar >>= case of
...
Run Code Online (Sandbox Code Playgroud) 我正在使用以下代码生成标记引脚.它加载完美,但在这张地图的左边我有过滤器.如何在不重新加载地图的情况下重新加载标记?这已经引起了一些挫折,所以任何帮助将不胜感激.
非常感谢,
//Google map results
var contentStrings = [];
var infowindow = new google.maps.InfoWindow();
var mapinited = false;
var map;
var myOptions = {
zoom: 11,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
var currentinfobox;
var myLatlng;
var markersArray=[];
var LatLngList = [];
$().ready(function() {
//reinit search
if (window.location.hash) {
submitForm(window.location.hash.replace('#',''));
}
else if (readCookie('sf')) {
//submitForm(readCookie('sf'));
}
//init map
$('#map_view').click(function() {
if (mapinited) {
return;
} else {
mapinited = true;
initMap();
}
function initMap() {
locate(["Ireland"],function(result) {
map = new …
Run Code Online (Sandbox Code Playgroud) 我正在尝试在Haskell中为类C语言编写编译器.编译器通过转换AST来进行.第一个传递解析输入以创建AST,使用符号表绑定结点,以允许在定义符号之前定位符号,而无需前向引用.
AST包含有关类型和表达式的信息,它们之间可以有连接; 例如,sizeof(T)
是一个依赖于类型的表达式T
,并且T[e]
是一个依赖于常量表达式的数组类型e
.
类型和表达式由Haskell数据类型表示,如下所示:
data Type = TypeInt Id
| TypePointer Id Type -- target type
| TypeArray Id Type Expr -- elt type, elt count
| TypeStruct Id [(String, Type)] -- [(field name, field type)]
| TypeOf Id Expr
| TypeDef Id Type
data Expr = ExprInt Int -- literal int
| ExprVar Var -- variable
| ExprSizeof Type
| ExprUnop Unop Expr
| ExprBinop Binop Expr Expr
| ExprField Bool …
Run Code Online (Sandbox Code Playgroud) 文档Parsec.Expr.buildExpressionParser
说:
相同优先级的前缀和后缀运算符只能出现一次(如果 - 是前缀否定,则不允许--2).
事实上,这是咬我的,因为我试图解析的语言允许任意重复它的前缀和后缀运算符(想想像C表达式**a[1][2]
).
那么,为什么要Parsec
制定这个限制,我该如何解决呢?
我想我可以将我的前缀/后缀解析器移到term
解析器中,因为它们具有最高优先级.
即
**a + 1
Run Code Online (Sandbox Code Playgroud)
被解析为
(*(*(a)))+(1)
Run Code Online (Sandbox Code Playgroud)
但是如果我想要解析它,我该怎么办?
*(*((a)+(1)))
Run Code Online (Sandbox Code Playgroud)
如果buildExpressionParser
做了我想要的,我可以简单地重新排列表中运算符的顺序.
注意请参阅此处以获得更好的解决方
我正在尝试为我正在Haskell中编写的编译器编写一个重命名器.
重命名器扫描AST以查找符号DEF,它将其输入符号表,以及符号USE,它通过查看符号表来解析.
在这种语言中,使用可以在defs之前或之后使用,因此看起来需要2遍策略; 一次通过查找所有defs并构建符号表,第二次用于解决所有用途.
但是,由于Haskell是懒惰的(像我一样),我认为我可以打结,并在实际构建之前将重命名符号表传递给最终符号表.只要我保证实际构建它,这很好.在命令式编程语言中,这就像回传邮件一样.这在Haskell中有效,但必须注意不要引入时间悖论.
这是一个简洁的例子:
module Main where
import Control.Monad.Error
import Control.Monad.RWS
import Data.Maybe ( catMaybes )
import qualified Data.Map as Map
import Data.Map ( Map )
type Symtab = Map String Int
type RenameM = ErrorT String (RWS Symtab String Symtab)
data Cmd = Def String Int
| Use String
renameM :: [Cmd] -> RenameM [(String, Int)]
renameM = liftM catMaybes . mapM rename1M
rename1M :: Cmd -> RenameM (Maybe (String, Int))
rename1M (Def name value) = do …
Run Code Online (Sandbox Code Playgroud) 在Haskell的Validations中声称使用了Writer
保证右关联级联.但是,这个例子似乎表明不是这样.什么是正确的答案?
{-# LANGUAGE OverloadedStrings #-}
import Control.Monad.Writer
import Data.String
data TM = TMempty
| TMappend TM TM
| TMfromString String
instance IsString TM where
fromString = TMfromString
instance Monoid TM where
mempty = TMempty
mappend = TMappend
instance Show TM where
showsPrec d TMempty = showString "\"\""
showsPrec d (TMfromString s) = showString $ show s
showsPrec d (TMappend a b) = showParen (d > 0) $
showsPrec 1 a .
showString " ++ " .
showsPrec …
Run Code Online (Sandbox Code Playgroud) 对于那些有可疑头脑的人来说,这不是家庭作业,只是好奇.
给定一个有限的字母表,是否有可能构建一个由反向词汇顺序的字母表组成的无限长单词列表?
即给出字母表 "ab"
是否可以构建列表:
["aaaaaa...", "baaaaa...", "abaaaa...", "bbaaaa...", "aabaaa...", ...]
Run Code Online (Sandbox Code Playgroud)
where ...
表示扩展到无限长度的列表(和列表列表).
一个天真的尝试是:
counters alphabet = [c:ounter | ounter <- counters alphabet, c <- alphabet]
Run Code Online (Sandbox Code Playgroud)
但这不起作用,因为它是递归的.
当然,对于工作版本,如果您尝试打印结果,则只会看到第一个元素被打印为字母表中第一个元素的无限列表.但是,您应该能够这样做:
mapM_ (print . take 2) . take 4 . counters $ "ab"
Run Code Online (Sandbox Code Playgroud)
并看到输出:
aa
ba
ab
bb
Run Code Online (Sandbox Code Playgroud) 是否可以使用数字参数创建类型?
即如果我想创建一个具有固定位宽的整数类型:
newtype FixedWidth w = FixedWidth Integer
addFixedWidth :: FixedWidth w -> FixedWidth w -> FixedWidth (w+1)
mulFixedWidth :: FixedWidth w -> FixedWidth w -> FixedWidth (2*w)
Run Code Online (Sandbox Code Playgroud)
因此,类型检查器只允许FixedWidth
添加或相加相同类型的s,但也确定结果的正确精度.
我知道你可以这样做:
data Nil = Nil
data Succ x = Succ
addFixedWidth :: FixedWidth w -> FixedWidth w -> FixedWidth (Succ w)
Run Code Online (Sandbox Code Playgroud)
并代表数字4 Succ (Succ (Succ (Succ Nil))))
,但这非常难看.我还需要弄清楚如何Succ
为乘法结果类型附加两个s.