的:browse
,:info
和:type
GHCI命令都非常方便.
是否有可能在Haskell程序中获得相同的程序信息?也就是说,从模块中获取导出的函数,类型的东西等.
如何以当前长度生成列表中所有可能的元素集?
?- 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) 有一套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+
.
我怎么能以正确的方式做到这一点?
我有一些.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程序。
如何生成具有当前长度的列表元素的所有可能的非减少集?
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) 我看到一些涉及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) 假设有一些数据类型来表达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
我想这样做,[string]::Join(", ", $HashTable.Keys);
但返回System.Collections.Hashtable+KeyCollection...
而不是枚举值.
我需要为此制作一个foreach循环吗?
以下是类型签名chunksOf
和splitPlaces
来自Data.List.Split
:
chunksOf :: Int -> [e] -> [[e]]
splitPlaces :: Integral a => [a] -> [e] -> [[e]]
Run Code Online (Sandbox Code Playgroud)
为什么某些功能(如chunksOf
)使用Int
而其他功能(如)使用splitPlaces
更通用的功能Integral a
?
我试着寻找一个答案,但没有发现任何匹配这个问题.如果已有答案,请随时将我链接到答案.
我所做的是提交并推送大量更改作为一次提交.虽然我没有把那个推入合并到主人.我现在想在上演任何内容之前回到状态,所以我可以将更改分阶段提交.
我尝试使用推送的更改创建一个新分支(已保存的工作),删除原始远程分支(用户登录),然后将新分支合并到原始本地分支,但这只是让我回到我所在的位置现在,用户登录分支不包含任何要添加/提交的内容.
那么我如何获得所有这些更改,以便我可以单独审核和分阶段(使用git add -p)?
haskell ×5
prolog ×2
arrays ×1
c++ ×1
commit ×1
equivalence ×1
ffi ×1
git ×1
hashtable ×1
k-combinator ×1
list ×1
powershell ×1
python ×1
revert ×1
s-combinator ×1
set ×1
stl ×1
string ×1
swi-prolog ×1
unstage ×1