小编ДМИ*_*КОВ的帖子

获取模块内容

:browse,:info:typeGHCI命令都非常方便.

是否有可能在Haskell程序中获得相同的程序信息?也就是说,从模块中获取导出的函数,类型的东西等.

haskell

6
推荐指数
2
解决办法
197
查看次数

获取prolog中的所有列表

如何以当前长度生成列表中所有可能的元素集?

?- get_set(X, [1,2,3]).  
X = [1,1,1] ;  
X = [1,1,2] ;  
X = [1,1,3] ;  
X = [1,2,1] ;  
X = [1,2,2] ;  
X = [1,2,3] ;  
X = [1,3,1] ;  
X = [1,3,2] ;  
X = [1,3,3] ;  
.....  
X = [3,3,2] ;  
X = [3,3,3].  
Run Code Online (Sandbox Code Playgroud)

UPD:Sharky给出了很好的答案.但也许这不是最好的.这是另一个:

get_set(X,L) :- get_set(X,L,L).

get_set([],[],_).
get_set([X|Xs],[_|T],L) :- member(X,L), get_set(Xs,T,L).
Run Code Online (Sandbox Code Playgroud)

prolog

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

访问set的第n个元素

有一套visited.我想检查从第4到最后的所有元素.我正在尝试做那样的事情

int visited_pointer = 4;
for ( set<int>::iterator i_visited=visited.begin()+visited_pointer
    ; i_visited!=visited.end()
    ; i_visited++
)
Run Code Online (Sandbox Code Playgroud)

和错误operator+.

我怎么能以正确的方式做到这一点?

c++ stl set

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

从python调用prolog谓词

我有一些.pl文件,我想从python脚本调用其中声明的谓词。我怎样才能做到这一点?

例如, test.pl

rD( [], Ans, Ans ).
rD( [X|Xs], Ans, Acc ) :-
    member( X, Acc ),
    rD( Xs, Ans, Acc ), !.
rD( [X|Xs], Ans, Acc ) :-
    \+member( X, Acc ),
    append( Acc, [X], AccNew ),
    rD( Xs, Ans, AccNew ), !.
Run Code Online (Sandbox Code Playgroud)

?- rD( [1,2,3,4,5,4], X ).
X = [1, 2, 3, 4, 5].
Run Code Online (Sandbox Code Playgroud)

我想以rD某种方式从python脚本调用并在结果变量中获取答案

result
[1, 2, 3, 4, 5]
Run Code Online (Sandbox Code Playgroud)

ps:这只是一个例子,我不想重写当前的Prolog程序。

python prolog ffi swi-prolog

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

获取haskell中所有非减少列表集的列表

如何生成具有当前长度的列表元素的所有可能的非减少集?

getSets :: [Int] -> Int -> [[Int]]
...

> getSets [0..9] 3
[[0,0,0],[0,0,1]..[3,9,9],[4,4,4]..[8,9,9],[9,9,9]]
Run Code Online (Sandbox Code Playgroud)

haskell list

5
推荐指数
2
解决办法
643
查看次数

为什么把这个liftIO放在一个函数中,但直接调用不行?

我看到一些涉及monad实例的奇怪行为.我正在编写一个快照应用程序,在我的一个处理程序中,除非我创建一个函数,否则它将无法编译.

withManager直接在我的处理程序中调用如下:

authenticateLanding :: Handler App App ()
authenticateLanding = do
    req <- getRequest
    oir <- liftIO $ withManager $ OpenId.authenticateClaimed (convertParams req)
    writeBS (fromString $ show oir)
Run Code Online (Sandbox Code Playgroud)

导致此编译时错误

openIDTrial.hs:120:25:
    No instance for (Control.Monad.Trans.Control.MonadBaseControl
                       IO m1)
      arising from a use of `withManager'
    Possible fix:
      add an instance declaration for
      (Control.Monad.Trans.Control.MonadBaseControl IO m1)
    In the expression: withManager
    In the second argument of `($)', namely
      `withManager $ OpenId.authenticateClaimed (convertParams req)'
    In a stmt of a 'do' block:
      oir <- liftIO
             $ …
Run Code Online (Sandbox Code Playgroud)

haskell

5
推荐指数
0
解决办法
471
查看次数

从lambda项转换为组合项

假设有一些数据类型来表达lambda和组合术语:

data Lam ? = Var ?                   -- v
           | Abs ? (Lam ?)           -- ?v . e1
           | App (Lam ?) (Lam ?)     -- e1 e2
             deriving (Eq, Show)

infixl 0 :@
data SKI ? = V ?                     -- x
           | SKI ? :@ SKI ?          -- e1 e2
           | I                       -- I
           | K                       -- K
           | S                       -- S
             deriving (Eq, Show)
Run Code Online (Sandbox Code Playgroud)

还有一个函数来获取lambda术语的自由变量列表:

fv ? Eq ? ? Lam ? ? [?]
fv (Var v) = [v] …
Run Code Online (Sandbox Code Playgroud)

haskell lambda-calculus equivalence k-combinator s-combinator

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

将哈希表的键转换为字符串列表

我想这样做,[string]::Join(", ", $HashTable.Keys);但返回System.Collections.Hashtable+KeyCollection...而不是枚举值.

我需要为此制作一个foreach循环吗?

arrays string powershell hashtable

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

为什么有些Data.List.Split函数使用`Int`和其他`Integral a`?

以下是类型签名chunksOfsplitPlaces来自Data.List.Split:

chunksOf :: Int -> [e] -> [[e]]
splitPlaces :: Integral a => [a] -> [e] -> [[e]]
Run Code Online (Sandbox Code Playgroud)

为什么某些功能(如chunksOf)使用Int而其他功能(如)使用splitPlaces更通用的功能Integral a

haskell

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

如何将推送的提交还原为未分级?

我试着寻找一个答案,但没有发现任何匹配这个问题.如果已有答案,请随时将我链接到答案.

我所做的是提交并推送大量更改作为一次提交.虽然我没有把那个推入合并到主人.我现在想在上演任何内容之前回到状态,所以我可以将更改分阶段提交.

我尝试使用推送的更改创建一个新分支(已保存的工作),删除原始远程分支(用户登录),然后将新分支合并到原始本地分支,但这只是让我回到我所在的位置现在,用户登录分支不包含任何要添加/提交的内容.

那么我如何获得所有这些更改,以便我可以单独审核和分阶段(使用git add -p)?

git commit revert unstage

5
推荐指数
2
解决办法
7329
查看次数